在使用IDA Pro和WinDbg调试应用程序时,我遇到以下声明。
mov esi, ds:(dword_16C6 - 16B2h)[esi]
为简单起见,假设
mov esi, ds:(ABC)[esi]
(ABC)
在这里是什么意思?
答案 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]
语法保持了一致性,该反汇编程序用于符号+寄存器寻址模式。