首页 文章

x86汇编指令:call * Reg

提问于
浏览
9

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

call *Reg

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

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

1 回答

  • 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调用来更改

    • 你're setting the register value but it'

    • 您将寄存器值设置为位于特定地址的数据而不是地址本身

    • 你正在编码你的CALL reg32 OP代码不正确,(例如:FF D0是十六进制的CALL EAX)

相关问题