【发布时间】:2015-10-28 19:55:33
【问题描述】:
我正在尝试使用调用指令进入另一个函数 这些是我的尝试:
call 0x08048b98
由于某种原因,这只是调用 0x5d6cc555,我不知道它是从哪里获得该值的。
mov eax, 0x08048b98
call eax
这给了我 mov 指令的段错误。
我知道我一定错过了一些东西,但我已经工作了好几个小时了,还是想不通。任何帮助将不胜感激!
【问题讨论】:
-
您使用的是哪个汇编程序?使用普通的
0x08048b98可能指的是位于该地址的内存......你必须以某种方式告诉编译器这些是简单的常量,而不是地址。 -
我使用 GCC 作为编译器,使用 ODJDUMP 作为反汇编程序。我不知道如何告诉编译器这些是简单的常量
-
请注意,AT&T 语法在这里起作用(操作数顺序,一般语法)。在常量前面加上一个美元符号来引用常量而不是地址。
-
我刚刚尝试了“代码”(调用 $0x08048b98),但在尝试编译时出现“操作数类型与 `call' 不匹配”错误。
-
是的,坦率地说,我不知道如何将绝对值传递给
call。 :/ 试试mov $0x08048b98, %eax; call %eax。在互联网上搜索更多信息。