0

所以如果我有这样的东西

rout:
pop eax
pop ecx
add ecx,2
push ecx
ret

然后就

push 3
call rout

我注意到第一次弹出不会像我想象的那样给我 3 的值,而是在第一次弹出后得到它。

我的问题是,当我调用它时,推送到堆栈的最后一个值是什么?(在本例中的寄存器 eax 中)

4

1 回答 1

1

假设您正在使用 80x86 架构:

它是 proc 的返回地址(如果它是近调用)。如果是 NEAR 调用,下一个 POP 将给您值 (3),如果是 FAR 调用,则返回地址的段。

检查站点以了解发出 CALL 时实际发生的情况的伪代码。

于 2012-09-12T17:10:41.847 回答