所以如果我有这样的东西
rout:
pop eax
pop ecx
add ecx,2
push ecx
ret
然后就
push 3
call rout
我注意到第一次弹出不会像我想象的那样给我 3 的值,而是在第一次弹出后得到它。
我的问题是,当我调用它时,推送到堆栈的最后一个值是什么?(在本例中的寄存器 eax 中)
假设您正在使用 80x86 架构:
它是 proc 的返回地址(如果它是近调用)。如果是 NEAR 调用,下一个 POP 将给您值 (3),如果是 FAR 调用,则返回地址的段。
检查此站点以了解发出 CALL 时实际发生的情况的伪代码。