我正在“调试”一段x86代码 - 前言是从“解锁”它的代码中得到的一系列5个数字,它在内存和数学中跳了很多,并且数字包含它。 / p>
我在第一次“跳跃”之前跟踪了我需要输入的内容,它是:
cmp %eax,0x80498d4(,%ebx,4)
我知道这个命令是cmp s, d
,我正在拿d-s并设置EFLAGS。但是在这个例子中D 0x80498d4(, %ebx,4)
是什么?显然正在注册%ebx
,但我不知道是什么。
答案 0 :(得分:4)
那是AT& T memory reference syntax。
AT& T的displacement(base register, offset register, scalar multiplier)
语法转换为英特尔的[base register + displacement + offset register * scalar multiplier]
语法(我认为这更容易理解)。
因此,AT& T语法中的cmp %eax,0x80498d4(,%ebx,4)
相当于英特尔语法中的cmp [80498d4h + ebx*4], eax
。
该指令以英文读取为“将寄存器EAX的内容与地址0x80498d4 +(EBX * 4)的内存内容进行比较”。