ret指令是否将4加到esp寄存器上?
ret
指令是否导致“esp”寄存器增加4?
Does the ret
instruction cause "esp" register to be increased by 4?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
ret
指令是否导致“esp”寄存器增加4?
Does the ret
instruction cause "esp" register to be increased by 4?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
是的,它执行
您可以使用它
来避免它。
编辑:这正是 ret 所做的。例如,
jmp rel_offet
只不过是隐藏的add eip, offset
,或者jmpabsolute_offset
是mov eip,absolute_offset
>。当然,处理器处理它们的方式存在差异,但从程序员的角度来看,这就是发生的一切。此外,还有一种特殊形式的 ret : ret imm8 也会将此 imm8 值添加到 esp :例如 __stdcall< /code> 函数使用它从堆栈中丢弃其参数。更不用说在 16 位模式下使用的
retf
版本,它还会从堆栈中弹出cs
。编辑2:
意味着:
Yes, it performs
You can use
to avoid it.
EDIT: It's exactly what
ret
does. For example,jmp rel_offet
is nothing than a hiddenadd eip, offset
, orjmp absolute_offset
ismov eip, absolute_offset
. Sure there are differences in the way the processor treats them, but from programmer's point of view it's all that happens.Also, there is a special form of
ret
:ret imm8
that also adds this imm8 value toesp
: for example a__stdcall
function uses it to discard its parameters from the stack. Not to mentionretf
version, used in 16bit mode, that also pops thecs
from the stack.EDIT2:
means:
是的,因为在堆栈上有(嗯,应该有,请参阅缓冲区溢出)恢复程序执行的地址。所以 ret 的意思是
正如
鲁斯利克所说
yes, because on the stack there is (well, there should be, see buffer overflow) the address to where resume the execution of the program. So ret means
which is
just as ruslik said
是的,当处理器在 32 位保护模式下运行时。在实模式或 16 位保护模式下,RET 执行 POP IP,这将导致 ADD ESP, 2(而不是 4)。
Yes, when the processor is running in 32-bit protected mode. In Real mode or 16-bit protected mode RET does a POP IP, which will cause an ADD ESP, 2 (instead of 4).