如果不允许pop cs:ip,ret是如何工作的

365游戏厅平台 2025-10-23 02:10:09 admin

在英特尔开发人员手册第2卷中,您可以看到近跳的操作码仍然存在。所以答案是,不,并不是每一个呼叫/跳转都需要远距离呼叫。

有几个例子:

代码语言:javascript运行复制EB cb JMP rel8 Jump short, RIP = RIP + 8-bit displacement sign extended to 64-bits

E9 cw JMP rel16 Jump near, relative, displacement relative to next instruction. Not supported in 64-bit mode.

E9 cd JMP rel32 Jump near, relative, RIP = RIP + 32-bit displacement sign extended to 64-bits

...

EA cd JMP ptr16:16 Jump far, absolute, address given in operand

EA cp JMP ptr16:32 Jump far, absolute, address given in operand

FF /5 JMP m16:16 Jump far, absolute indirect, address given in m16:16

FF /5 JMP m16:32 Jump far, absolute indirect, address given in m16:32.

REX.W + FF /5 JMP m16:64 Jump far, absolute indirect, address given in m16:64. Op通常使用哪个操作码是由编译器/汇编程序根据距离来选择的。当然,在汇编程序中,您可以通过特定的请求来影响它(如果您想在运行时修补代码,则可能需要这样的距离)。

关于分段开关,在Windows保护模式环境中已经消除了这种需求,因为使用了一个平面内存模型。但是,这是操作系统的决定,而不是CPU的操作,所以这仍然是可能的。

相关文章

《塞尔达传说:荒野之息》古代武器伤害数据分析

裤子尺码对照表

wps怎么设置隐藏文字