调用堆栈问题

时间:2012-05-06 19:02:48

标签: windows x86 callstack

我最近一直在看电话堆栈。但是,我读过的所有示例和文章都是单线程的。我感兴趣的是调用堆栈在内存中的样子以及我们如何分析它。

很抱歉在一篇文章中包含了这么多问题。但是,当每个问题都相关时,为每个问题创建一个帖子似乎很麻烦。

我的问题是针对Windows x86的。 所以我遇到的问题是:

  1. 进程中的每个线程是否总有一个调用堆栈?即,线程不共享调用堆栈?

  2. 每个调用堆栈的大小是否已修复?或者每个线程可以有所不同吗?

  3. 让我们假装自己正在做所有事情并在汇编中编写程序。调用堆栈是否神奇地给了我们?或者我们是否必须自己实施?

  4. 如果我们在程序集中创建程序,那么我们是否保留一些内存并将调用堆栈内存起始地址设置为ESP以进行设置?

  5. - 迈克尔

1 个答案:

答案 0 :(得分:3)

1)每个线程都有自己的堆栈 - 几乎按定义。

2)最大堆栈大小是标题中指定的进程限制。初始线程堆栈大小是线程创建参数 - 请参阅CreateThread()API。

3)操作系统管理所有内存。新线程的堆栈由内核在创建线程时动态分配,堆栈顶部填充堆栈帧,除其他外,它允许线程以类似于中断的方式弹出帧来开始执行 - 返回。不要试图在家里这样做。

4)不!导入并调用CreateThread()API。