4

如果我的命令行之一说:

jmp   *0x804a180(,%eax,4)

这意味着什么?我特别问是因为第一个逗号之前没有任何值,而且我不确定地址之前的 * 到底是什么意思。

4

1 回答 1

8

该指令跳转到其值位于计算为的地址的位置%eax * 4 + 0x804a180

*AT&T 语法中用于指示间接跳转和调用。它的基本意思是“跳转到 this 指向的位置,而不是 this 的值”。区分以下指令很有用:

jmp myAddress  # Jumps to the location myAddress
jmp *myPointer # Jumps to the location contained at myPointer

对于空值,它被视为 0。AT&T 寻址的完整形式是offset(%base, %index, multiplier),但这些值中的任何一个都可以省略。除了乘数(默认为 1)之外,每个的默认值都是 0。大多数情况下,您可以将它们排除在外,但如果您有索引且没有基数,则需要逗号,以便汇编程序可以判断哪个这是。

于 2012-10-19T16:58:41.073 回答