x86汇编指令:call * Reg

时间:2011-12-07 16:51:42

标签: assembly x86 call

任何人都可以给我一些有关x86汇编中间接函数调用的信息,例如

之类的指令
call *Reg

因此,函数标签的地址存储在寄存器中。不知何故,我无法通过谷歌找到有关它的信息。

此外,如果在运行具有此类指令的x86汇编程序时遇到Trace / breakpoint异常,这意味着什么?

1 个答案:

答案 0 :(得分:8)

英特尔和AMD发布了关于x86的非常好的文档。 这是一个指向Intels指令集引用的链接,当然它有一个关于CALL的部分。 http://www.intel.com/design/intarch/manuals/243191.HTM

OP Code: FF /2 
Instruction: CALL r/m32 
Description: Call near, absolute indirect, address given in r/m32

使用NASM语法

lbl_start:
 MOV EAX, lbl_function1
 CALL EAX
 RETN

lbl_function1:
 MOV EAX, 1
 RET 0

如果你得到一个例外,那几乎可能意味着什么。这是一些常见的问题......

  • 您没有将寄存器设置为程序中的地址
    • 您正在设置注册值,但是在CALL reg32之前发生的API调用正在更改
    • 您将寄存器值设置为位于特定地址的数据,而不是地址本身
  • 您错误地编码了CALL reg32 OP代码,(例如:FF D0是十六进制的CALL EAX)