1

假设您查看具有以下代码的进程的堆栈和寄存器...

...
void Test()
{
     for (int i = 0; i < 10; i++)
     {
          OneRunDontKnow();
     }
}
...

当进程执行循环时,您会准确地查看堆栈两次,并且两次都OneRunDontKnow位于堆栈的顶部。

您能否以某种方式知道是否OneRunDontKnow从堆栈中弹出然后再次推入,或者它是否从未弹出?

编辑:OneRunDontKnow可以有任何签名(它也可以带参数或返回值)。

4

1 回答 1

0

可能最好的方法是查看您的汇编代码。 OneRunDontKnow()没有参数,所以堆栈上唯一的东西就是指令指针和其他堆栈帧的东西,但没有参数。所以在反汇编中找到OneRunDontKnow()应该调用的地方,看看代码里面的( , PUSH, etc) 是什么类型的。JMPLOOP_LOOPLOOPE

于 2013-03-31T19:05:50.580 回答