x86汇编指令:call*Reg

use*_*105 10 x86 assembly call

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

call *Reg
Run Code Online (Sandbox Code Playgroud)

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

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

Lou*_*cci 9

英特尔和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
Run Code Online (Sandbox Code Playgroud)

使用NASM语法

lbl_start:
 MOV EAX, lbl_function1
 CALL EAX
 RETN

lbl_function1:
 MOV EAX, 1
 RET 0
Run Code Online (Sandbox Code Playgroud)

如果你得到一个例外它可能意味着几乎任何东西.这是一些常见问题......

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