通过以下方式执行远程调用,在汇编中被认为是合法的:
call farCall ;call an example function that jumps to memory
farCall:
jmp 0x1111:2222 ;example address in memory
程序加载在0x1111:2222
;do some stuff
ret ;return to where the call was made, NOT THE JUMP
TO THIS ADDRESS
请注意,这是16位实模式,而不是32位保护模式(我知道已有问题)
答案 0 :(得分:2)
您的代码在调用时不会保存堆栈上的完整远程返回地址(只有偏移量,而不是CS段),因此0x1111:2222处的子例程无法使用retf
返回给调用者可能是平原,也在ret
附近。
为什么不简单地call 0x1111:2222
?
您还可以使用push cs
+ call (near)
或push cs
+ push offset
来模拟远程呼叫指令的堆叠效果。