如果我的命令行之一说:
jmp *0x804a180(,%eax,4)
这是什么意思?我特别要求,因为在第一个逗号之前没有任何值,我不确定地址前的*是什么意思。
答案 0 :(得分:8)
此指令跳转到其值位于计算为%eax * 4 + 0x804a180
的地址的位置。
*
在AT& T语法中用于指示间接跳转和调用。它基本上意味着“跳转到这个指向的位置,而不是它的值”。区分以下说明很有用:
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.大多数情况下,你可以将它们排除在外,但是如果你有一个索引而没有基数,那么你需要逗号,以便汇编器可以知道哪个它是。