如果我在EAX
有一个模块的基地址并且想要调用位于EAX+C
的函数,那么是否有以下代码的单行代替?
ADD EAX, C
CALL EAX
似乎CALL [EAX+C]
给出了未定义的行为。
答案 0 :(得分:7)
没有
call eax
为Register indirect,它调用其地址位于 EAX 的例程。
call [eax+C]
为Memory indirect,它调用其地址位于 MEM [EAX + C] 的例程。
这就是他们有不同行为的原因
x86不支持call eax+C
形式,即带间隙的寄存器间接。
没有单一的指令可以做。