GDB:打印二进制值会省略前导零吗?

标签 gdb nasm yasm

我正在使用 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] 对应的行上设置断点后,我使用 examine 命令得到以下二进制值:

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

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

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

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

最佳答案

Am I doing something wrong in displaying these values?

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

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

关于GDB:打印二进制值会省略前导零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982708/

相关文章:

php - 通过 PHP 启动 C 程序时出现段错误

linux - gdb 没有给出错误的完整描述

linux - GDB 附加到可执行文件被删除的进程

android - Android中的原生库加载断点

pointers - 如何在 x86 中声明一个全局双字指针?

linux - 浮点异常错误(核心转储)

assembly - YASM [symbol + $$]有效地址在平面二进制格式中太复杂

ubuntu - 在 Ubuntu 上离线安装 NASM 的步骤?

assembly - `000000q`是什么意思?

assembly - 如何在 assembly 中打印星形三角形?