我正在对二进制文件进行逆向工程,但我很困惑,因为我的理论知识目前与实际发生的事情发生冲突。
我认为这条指令将值 0xdeadbeef 写入 edx:
mov edx, DWORD PTR ds:0xdeadbeef
我认为这条指令取消引用地址 0xdeadbeef 并将存储在该地址的任何 DWORD 值写入 edx:
mov edx, DWORD PTR ds:[0xdeadbeef]
但是,实际上,运行此指令:
mov edx, DWORD PTR ds:0x804bdf4
结果 edx 的值为:
edx = 0xb73fc115
0xb73fc115
是存储在地址的值0x804bdf4
:
x 0x804bdf4
0x804bdf4 <gContents>: 0xb73fc115
所以这意味着地址被取消引用,即使程序集不包含任何方括号。我认为方括号表示取消引用操作。我误解了什么?
我正在使用 GDB
更新:我刚刚在radare2上对其进行了测试,它以我期望的格式显示了指令
mov edx, dword [obj.gContents]
我也用objdump测试过,结果和用GDB一样。我认为这是我目前不理解的某种语法?