草庐IT

ELK堆栈

全部标签

windows - Windows程序使用多少个堆栈?

返回地址和数据是混合/存储在同一个堆栈中,还是在2个不同的堆栈中? 最佳答案 它们是混合的。但是,这取决于实际的编程语言/编译器。我可以想象一个编译器在堆上为局部变量分配空间,并在堆栈上保留一个指向存储的指针。每个进程中的每个线程都有一个堆栈。因此,例如,一个有20个线程的进程有20个独立的堆栈。 关于windows-Windows程序使用多少个堆栈?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

windows - Win32 堆栈部分基地址

我知道要找到一个文本(代码)部分的基地址,应该寻找.text部分的虚拟地址(除非启用了ASLR),但是堆栈呢?堆栈内存是否与堆一起存储在.data段中?如果是这样,我应该寻找.data部分虚拟地址以了解堆栈基地址 最佳答案 堆栈不是一个部分。为每个线程动态分配一个堆栈。(如果它是一个部分,那么每个进程只能有一个线程。) 关于windows-Win32堆栈部分基地址,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

windows - Windows x86 堆栈中的堆栈是如何定义的?

首先我要证明我对堆栈的理解很差,然后我要问一个不太连贯的问题,但不能很好地回答,因为这个问题不够具体,无法引出一个精心设计的问题回答。那么,当程序运行时,函数会被压入堆栈-这意味着堆栈指针会递增或递减?栈内存分配到底存放了什么?指向变量数据的指针,指向程序其余部分的指针?我只是不明白堆栈中到底存储了什么(什么数据类型,什么类型的引用,它们是如何存储的)我希望一个函数存储它的局部变量指针和一个指向调用它的地址的指针,以便它可以返回.此外,windowsx86虚拟内存分配实际上将单个虚拟内存块映射到任意多个物理内存地址,因此堆栈在windowsx86系统的物理内存中是否连续?最后,假设堆栈

windows - 程序集 - 如何修改堆栈大小?

我是汇编编程的新手,我正在使用使用内存堆栈的push和pop指令。那么,堆栈默认大小是多少,如何修改它以及它的大小限制是多少? 最佳答案 筹码量取决于很多因素。这取决于你从哪里开始堆栈,你有多少内存,你使用的是什么CPU等等。您使用的CPU不称为“WindowsCPU”。如果您要指定正在使用的CPU,请详细指定该CPU的名称,而且非常重要的是,还要指定CPU的体系结构。在这种情况下,您可能使用的是x86架构。这是x86架构的内存映射:AlladdressesBefore0X100000-Free0x100000-0xc0000-BI

c - 增加 Clion 中 C 程序的堆栈大小

如何为具有深度递归调用的C程序增加堆栈的最大大小?项目是否有任何配置可以指定可执行文件的堆栈或堆大小? 最佳答案 我通过在项目的CMakeList.txt中添加以下链接器标志解决了这个问题MATH(EXPRstack_size"16*1024*1024")#16Mbset(CMAKE_EXE_LINKER_FLAGS"-Wl,--stack,${stack_size}") 关于c-增加Clion中C程序的堆栈大小,我们在StackOverflow上找到一个类似的问题:

windows - 在 Xperf 中捕获调用堆栈和事件

抱歉这个愚蠢的问题。我是Xperf新手。我在64位Windows8.1上,我的应用程序也是x64。我想使用Xperf在应用程序中捕获调用堆栈和我定义的事件。我在我的应用程序中注册了GUID35f7872e-9b6d-4a9b-a674-66f1edd66d5c。当我使用时:xperf-onPROC_THREAD+LOADER+Base-startUserSession-on35f7872e-9b6d-4a9b-a674-66f1edd66d5c-BufferSize1024-stackwalkprofile我可以获得所有事件但没有调用堆栈。但是,如果我删除-on35f7872e-9b6

windows - 试图将 "variable"插入堆栈

我有以下代码:[bits64]%definemsgdb"%i\n",0xa,0%definevar-4movr8,rspmov[r8+(var)],WORD0xFFFFpushWORD[r8+(var)];notworks;iftryingtopushDWORDitsshowserrorinstructionnotsupportedin64bitasmpushDWORD0xFFFF;workscalltCtAKBWomJmsgtCtAKBWomJ:call[rbx+3*8]addrsp,8push0call[rbx]call[rbx+x*8]调用asmloaderapix=0,退出x=

windows - 如何查看我的程序堆栈跟踪?

我正在尝试学习WinDbg。在简单的程序中,我在CriticalSection上无限等待。我的程序挂起,我使用任务管理器获取程序转储。现在,每当我使用kc或k命令获取堆栈跟踪时,它都会给我以下堆栈跟踪。wow64cpu!CpupSyscallStubwow64cpu!Thunk0ArgReloadStatewow64!RunCpuSimulationwow64!Wow64LdrpInitializentdll!LdrpInitializeProcessntdll!_LdrpInitializentdll!LdrInitializeThunk现在,为什么它不显示我实际代码的堆栈跟踪。我如

c - WaitForMultipleObjects 堆栈

您知道c中的Windows库中的WaitForMultipleObjects函数正在获取作为对象数组的参数。但是在我的作业中,助手想要将所有线程保存在一个堆栈中而不是一个数组中,我如何将这个函数与堆栈一起使用? 最佳答案 您只能使用数组调用此函数。那不是你能控制的。因此,您需要使用能够将其内容公开为数组的堆栈。或者一个能够像堆栈一样操作的数组。但是,为您的线程使用堆栈容器是完全不合适的,这是完全合理的。为什么你的作业助手要使用堆栈? 关于c-WaitForMultipleObjects堆

Windows 8堆栈问题与mingw

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。更详细地描述您的问题或includeaminimalexample在问题本身。关闭8年前。Improvethisquestion我在Windows8下使用C++(mingw编译器)遇到堆栈溢出问题。它只有64MB。我不知道如何改变它。我试着写#pragmacomment(linker,"/STACK:512000000")没用另外,我尝试编译我的程序g++-Wl,--stack=512000000a.cpp-oa.exe这也无济于事。然而,在Win