如果我的命令行之一显示:
jmp *0x804a180(,%eax,4)
这意味着什么?我特别询问是因为第一个逗号之前没有值,而且我不确定地址之前的 * 到底是什么意思。
该指令跳转到其值位于计算得出的地址处的位置%eax * 4 + 0x804a180
.
The *
在 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。大多数时候,您可以将它们省略,但如果您有索引并且没有基数,则需要在那里使用逗号,以便汇编器可以区分哪个这是。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)