【问题标题】:GDB: Printing binary values omits leading zero?GDB:打印二进制值省略前导零?
【发布时间】:2018-12-31 01:03:11
【问题描述】:

我正在用 y 汇编器编写一些简单的汇编程序。但是,我注意到虽然我可以很好地检查内存中的二进制值,但打印它们(在寄存器中)会省略前导零。这总是让我措手不及,所以我想知道是否有原因。


程序

    segment .data

f   dd  2.25        ; 32-bit floating point.

    segment .text
    global main

main:
    mov eax, [f]
    xor rax, rax
    ret

GDB

mov eax, [f]对应的行上设置断点后,我使用检查命令得到以下二进制值:

(gdb) x/1tw &f
0x601030:   01000000000100000000000000000000

我已经手动验证了这一点。但是,打印命令在加载到eax 寄存器后会产生不同的结果:

(gdb) p/t $eax
$2 = 1000000000100000000000000000000

前者为32位,后者为31位,省略前导零。我在显示这些值时做错了吗?

【问题讨论】:

    标签: gdb nasm yasm


    【解决方案1】:

    我在显示这些值时做错了吗?

    没有。 GDB 在处理xp 命令之间的前导零时不一致,仅此而已。

    如果您希望 print 打印前导零,请使用 p/tz $eax (documentation)。

    【讨论】:

    • 谢谢!提示最有帮助!
    • 据我所见,p/tzp/z 相同,它以十六进制而不是二进制打印(尽管它确实保持前导零)。我找不到使 GDB 以二进制形式打印并包含前导零的方法。我在 GDB 8.2.1 上,供参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2021-05-25
    相关资源
    最近更新 更多