GDB:打印二进制值会省略前导零吗?
GDB: Printing binary values omits leading zero?
我正在用 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
= 1000000000100000000000000000000
前者为32位,后者为31位,前导零省略。我在显示这些值时做错了什么吗?
Am I doing something wrong in displaying these values?
没有。 GDB 在 x
和 p
命令之间对前导零的处理不一致,仅此而已。
如果您希望 print
打印前导零,请使用 p/tz $eax
(documentation)。
我正在用 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
= 1000000000100000000000000000000
前者为32位,后者为31位,前导零省略。我在显示这些值时做错了什么吗?
Am I doing something wrong in displaying these values?
没有。 GDB 在 x
和 p
命令之间对前导零的处理不一致,仅此而已。
如果您希望 print
打印前导零,请使用 p/tz $eax
(documentation)。