Debugging GDB反汇编使用不一致的寄存器命名

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中的寄存器时

我正在调试/反汇编一个非常简单的C程序,我只是为了学习而写的。然而,我注意到GDB似乎在反汇编输出和在断点后输入“info registers”时它告诉我的寄存器之间使用了不一致的符号

以下是反汇编输出的一部分(在我的断点附近):

我在cmp操作发生的位置设置断点。正如您所看到的,它将寄存器ECX中的值与0进行比较,但是,ECX似乎不是一个实寄存器。当我得到“info registers”的结果时,它似乎返回了真实的寄存器,即rcx。例如,当我尝试使用“set$ecx=1”操作GDB中的寄存器时,它没有效果,但是当我使用“set$rcx=1”时,它似乎确实起作用

这种不一致是怎么回事?有没有办法解决

这种不一致是怎么回事

指令
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