Debugging GDB反汇编使用不一致的寄存器命名
我正在调试/反汇编一个非常简单的C程序,我只是为了学习而写的。然而,我注意到GDB似乎在反汇编输出和在断点后输入“info registers”时它告诉我的寄存器之间使用了不一致的符号 以下是反汇编输出的一部分(在我的断点附近): 我在cmp操作发生的位置设置断点。正如您所看到的,它将寄存器ECX中的值与0进行比较,但是,ECX似乎不是一个实寄存器。当我得到“info registers”的结果时,它似乎返回了真实的寄存器,即rcx。例如,当我尝试使用“set$ecx=1”操作GDB中的寄存器时,它没有效果,但是当我使用“set$rcx=1”时,它似乎确实起作用 这种不一致是怎么回事?有没有办法解决 这种不一致是怎么回事 指令Debugging GDB反汇编使用不一致的寄存器命名,debugging,assembly,gdb,disassembly,Debugging,Assembly,Gdb,Disassembly,我正在调试/反汇编一个非常简单的C程序,我只是为了学习而写的。然而,我注意到GDB似乎在反汇编输出和在断点后输入“info registers”时它告诉我的寄存器之间使用了不一致的符号 以下是反汇编输出的一部分(在我的断点附近): 我在cmp操作发生的位置设置断点。正如您所看到的,它将寄存器ECX中的值与0进行比较,但是,ECX似乎不是一个实寄存器。当我得到“info registers”的结果时,它似乎返回了真实的寄存器,即rcx。例如,当我尝试使用“set$ecx=1”操作GDB中的寄存器时
cmp$0x0,%ecx
将寄存器rcx
的低位32位与0
进行比较,因此反汇编是正确的
“信息寄存器”它看起来确实返回真实寄存器,即rcx
对
“设置$ecx=1”例如,它没有效果
它确实对我有影响:
(gdb) info reg rcx
rcx 0xffffffffffffffff -1
(gdb) set $ecx = 0
(gdb) info reg rcx
rcx 0xffffffff00000000 -4294967296
如果set$ecx=1
真的对您没有影响,那可能是GDB错误
(gdb) info registers
rax 0x1 1
rbx 0x0 0
rcx 0x1 1
rdx 0x1 1
rsi 0x3 3
rdi 0x3 3
(gdb) info reg rcx
rcx 0xffffffffffffffff -1
(gdb) set $ecx = 0
(gdb) info reg rcx
rcx 0xffffffff00000000 -4294967296