任何人都可以给我一些关于x86汇编中间接函数调用的信息,比如说明
call *Reg
因此,函数标签的地址存储在寄存器中 . 不知何故,我无法通过谷歌找到有关它的信息 .
此外,如果在运行具有此类指令的x86汇编程序时遇到Trace / breakpoint异常,这意味着什么?
英特尔和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)
1 回答
英特尔和AMD发布了关于x86的非常好的文档 . 这是一个指向Intels指令集引用的链接,当然它有一个关于CALL的部分 . http://www.intel.com/design/intarch/manuals/243191.HTM
使用NASM语法
如果你得到一个例外它可能意味着几乎任何东西 . 这是一些常见问题......
您没有将寄存器设置为程序中的地址
通过在CALL reg32之前发生的API调用来更改
你're setting the register value but it'
您将寄存器值设置为位于特定地址的数据而不是地址本身
你正在编码你的CALL reg32 OP代码不正确,(例如:FF D0是十六进制的CALL EAX)