法律远程调用x86实模式

时间:2012-08-23 21:19:49

标签: assembly x86 nasm

通过以下方式执行远程调用,在汇编中被认为是合法的:

    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位保护模式(我知道已有问题)

1 个答案:

答案 0 :(得分:2)

您的代码在调用时不会保存堆栈上的完整远程返回地址(只有偏移量,而不是CS段),因此0x1111:2222处的子例程无法使用retf返回给调用者可能是平原,也在ret附近。

为什么不简单地call 0x1111:2222

您还可以使用push cs + call (near)push cs + push offset来模拟远程呼叫指令的堆叠效果。