【问题标题】:x86 assembly instruction: call *Regx86 汇编指令:调用 *Reg
【发布时间】:2012-01-15 04:35:29
【问题描述】:

谁能给我一些关于 x86 汇编中的间接函数调用的信息,即像这样的指令

call *Reg

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

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

【问题讨论】:

标签: assembly x86 call


【解决方案1】:

英特尔和 AMD 发布了关于 x86 的非常好的文档。 这是英特尔指令集参考的链接,(当然)有一个关于 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)

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 2013-08-11
    • 2015-06-29
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多