0

嗨我刚开始学习汇编,我一直在查看一些代码,我知道 jmp 函数是一个无条件跳转,但我不确定如何判断这个 jmp 跳转到哪里。

jmp    *0x804a1a0(,%eax,4)

我知道“(,%eax,4)”部分表示存储在eax * 4中的值,并且它将涉及将其添加到其他内容以获得它将跳转到的最终值,但我确实这样做了不知道如何处理 *0x804a1a0 部分中的“*”。
这是否意味着存储在内存地址“0x804a1a0”+ eax*4 的值(并且这个十六进制是我应该跳转到的点)?

4

1 回答 1

1

这只是 AT&T 汇编中的一个符号问题。见 - https://sourceware.org/binutils/docs/as/i386_002dVariations.html

AT&T 绝对(相对于 PC 相对)跳转/调用操作数以 `*' 为前缀;它们在 Intel 语法中是不受限制的。

所以你的计算是正确的,跳转目标存储在[0x804a1a0 + eax*4]中,这很可能是从0x804a1a0开始的跳转表,编译器使用eax作为索引。

于 2013-10-06T07:19:32.610 回答