3

我正在“调试”一段 x86 代码 - 序言是“解锁”它的代码中的一系列 5 个数字,它在内存 + 数学中跳跃了很多,其中包含它的数字。

我已经在第一次“跳转”之前跟踪了我需要输入的内容,它是:

cmp    %eax,0x80498d4(,%ebx,4)

我知道这个命令是cmp s, d我使用 ds 和设置 EFLAGS 的地方。但是D 0x80498d4(, %ebx,4)在这种情况下是什么?显然正在做一些事情来注册%ebx,但我不知道是什么。

4

1 回答 1

4

那是 AT&T内存引用语法

AT&T 的displacement(base register, offset register, scalar multiplier)语法转换为 Intel 的[base register + displacement + offset register * scalar multiplier]语法(我认为这更容易理解)。

所以cmp %eax,0x80498d4(,%ebx,4)在 AT&T 语法中等同于cmp [80498d4h + ebx*4], eax在 Intel 语法中。

该指令用英文读作“将寄存器 EAX 的内容与地址 0x80498d4+(EBX*4) 处的内存内容进行比较”。

于 2013-10-13T04:14:07.073 回答