【问题标题】:GDB Register Display IssueGDB 寄存器显示问题
【发布时间】:2013-11-12 22:42:52
【问题描述】:

我最近开始更深入地研究汇编,当我分析以下代码段时,我无法确定发生了什么。本质上,0xFFFFFFFF 被移动到EAX,然后添加了 0x10。在 GDB 中查看EAX 时,执行后的值为 0xF 而不是 0x9。当我添加 0x11 而不是 0x10 时,会显示正确的结果 (0x10)。任何帮助将不胜感激。

我在下面附上了调试输出。

命令执行后的第一个值为EAX,使用print/x $eax显示。


(gdb) ni
$11 = 0xffffffff
Dump of assembler code from 0x8048096 to 0x80480a0:
=> 0x08048096 <_start+22>:      add    eax,0x10
   0x08048099 <_start+25>:      mov    eax,0x0
   0x0804809e <_start+30>:      add    BYTE PTR ds:0x804910c,0x22
End of assembler dump.

0x08048096 in _start ()

(gdb) ni
$13 = 0xf
Dump of assembler code from 0x8048099 to 0x80480a3:
=> 0x08048099 <_start+25>:      mov    eax,0x0
   0x0804809e <_start+30>:      add    BYTE PTR ds:0x804910c,0x22
End of assembler dump.

0x08048099 in _start ()

【问题讨论】:

    标签: math assembly printing gdb cpu-registers


    【解决方案1】:

    您似乎期望将0x10 添加到-1 (0xFFFFFFFF) 将产生0x9

    但是0x1016(十进制),将-1 添加到它会产生15(十进制),即0xF

    所以这里一切正常。

    【讨论】:

    • 我刚刚意识到我将 0x10 解释为十六进制的 A。感谢您的帮助,您是正确的。
    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 2016-03-06
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2022-06-22
    相关资源
    最近更新 更多