x86中寄存器之前的括号是什么意思?

时间:2018-11-07 12:10:02

标签: assembly x86 windbg disassembly ida

在使用IDA Pro和WinDbg调试应用程序时,我遇到以下声明。

mov esi, ds:(dword_16C6 - 16B2h)[esi]

为简单起见,假设

mov esi, ds:(ABC)[esi]

(ABC)在这里是什么意思?

1 个答案:

答案 0 :(得分:5)

在Intel语法中,圆括号用于分组,就像在数学中一样。之所以这样做是因为

ds:dword_16C6 - 16B2h[esi]

可能被解释为

(ds:dword_16C6) - (16B2h[esi])

没有任何意义。

在AT&T语法中,方括号用于分组。


换句话说,这是一种写ds:[esi + dword_16C6 - 16B2h]ds:dword_16C6[esi - 16B2h]的复杂方式,它们都是有效的MASM语法(我认为)。

有些人可能会说不必要的复杂,但是确实与symbol[index]语法保持了一致性,该反汇编程序用于符号+寄存器寻址模式。