0
我正在調試/反彙編一個非常簡單的C程序,我只是爲學習目的而編寫的。然而,我注意到GDB似乎在反彙編輸出和它告訴我當我在斷點之後輸入「信息寄存器」之間的寄存器時使用了不一致的符號。GDB反彙編使用不一致的寄存器命名
下面是反彙編輸出的一部分(在我的斷點):
0x0000000100000d15 <main+181>: xor %dl,%dl
0x0000000100000d17 <main+183>: mov %ecx,%edi
0x0000000100000d19 <main+185>: mov %dl,%al
0x0000000100000d1b <main+187>: callq 0x100000da0 <checkLicense>
0x0000000100000d20 <main+192>: mov %eax,%ecx
0x0000000100000d22 <main+194>: cmp $0x0,%ecx
0x0000000100000d25 <main+197>: je 0x100000d47 <main+231>
0x0000000100000d27 <main+199>: lea 0x1bb(%rip),%rax # 0x100000ee9
0x0000000100000d2e <main+206>: mov %rax,%rdi
這裏是輸出我得到的一部分,當我打電話GDB中的「信息登記」命令:
(gdb) info registers
rax 0x1 1
rbx 0x0 0
rcx 0x1 1
rdx 0x1 1
rsi 0x3 3
rdi 0x3 3
我在發生cmp操作的地方設置了我的斷點。正如你所看到的,它將寄存器ECX中的值與0比較,但是,ECX並不是真實的寄存器。當我得到「信息寄存器」的結果時,它似乎返回實際寄存器,即rcx。例如,當我嘗試使用「set $ ecx = 1」操縱GDB中的寄存器時,它沒有任何作用,但是當我「設置$ rcx = 1」時,它似乎工作。
這種不一致是怎麼回事,有沒有辦法解決這個問題?