3

我有一个程序比较两个值,我想打印它们以进行调试:

   0x00000000004005cd <+73>:    mov    DWORD PTR [rbp-0x4],eax
   0x00000000004005d0 <+76>:    mov    eax,DWORD PTR [rbp-0x4]
=> 0x00000000004005d3 <+79>:    cmp    eax,0x1e240
   0x00000000004005d8 <+84>:    jne    0x4005e6 <main+98>

所以我在 main+79 上放置了一个断点,我想打印 cmp 调用正在比较的值。

我怎样才能用 gdb 实现呢?

谢谢你的帮助。

4

2 回答 2

3

CMP不是一个电话 - 它是一个单一的指令。要查看 EAX 的当前值,请使用以下命令:

info registers eax

另一个比较是十六进制值 0x1e240。它不是一个地址,它是一个整数常量。

于 2013-06-27T13:13:13.563 回答
2

使用 print 和/或 x(检查)命令,您可以打印正在比较的值,在这种情况下,您也可以只打印寄存器。

print $eax
info registers

检查命令的格式通过输入help x

Formats: o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters: b(byte), h(halfword), w(word), g(giant, 8 bytes).

我假设0x1e240在这种情况下是一个地址(尽管它显然不是),假设我想打印从这个基地址开始的 4 个十六进制字。这将是:

x[count]{format}{size} 0x1e240
x/4xw 0x1e240

另外,请记住 print 也可以使用格式说明符:

print/{format} $eax
print/x $eax

查看其他有趣的命令,例如display

于 2013-06-27T13:32:31.673 回答