0

以下列方式执行远调用是否被认为是合法的集会:

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

4

1 回答 1

2

您的代码在调用时不会将完整的远返回地址(仅偏移量,但不是 CS 段)保存在堆栈上,因此 0x1111:2222 处的子例程无法使用retf并且很可能是普通的近处返回给调用者ret

为什么不简单call 0x1111:2222呢?

push cs您还可以使用+call (near)push cs+模拟远调用指令的堆栈效果push offset

于 2012-08-24T07:18:52.050 回答