为什么gdb中的“info register ebp”不显示十进制数?

Kor*_*gay 1 debugging x86 assembly gdb

我正在使用 gdb 调试一个非常简单的代码:

mov ebp,eax     ; Save # of bytes read from file for later
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

Breakpoint 2, Read () at hexdump1.asm:44
(gdb) info register eax
eax   0xd      13
(gdb) step
Read () at hexdump1.asm:45
(gdb) info register ebp
ebp   0xd      0xd
Run Code Online (Sandbox Code Playgroud)

为什么 gdb 显示 eax 为 0xd 13,而 ebp 显示为 0xd 0xd?

Mar*_*ick 5

该命令以原始格式(十六进制)和自然info registers格式打印寄存器。自然格式基于寄存器的类型,在 gdb 源代码的 xml 文件中声明。例如,包含:i386/32bit-core.xml

<reg name="eax" bitsize="32" type="int32"/>
<reg name="ecx" bitsize="32" type="int32"/>
<reg name="edx" bitsize="32" type="int32"/>
<reg name="ebx" bitsize="32" type="int32"/>
<reg name="esp" bitsize="32" type="data_ptr"/>
<reg name="ebp" bitsize="32" type="data_ptr"/>
<reg name="esi" bitsize="32" type="int32"/>
<reg name="edi" bitsize="32" type="int32"/>

<reg name="eip" bitsize="32" type="code_ptr"/>
<reg name="eflags" bitsize="32" type="i386_eflags"/>
<reg name="cs" bitsize="32" type="int32"/>
<reg name="ss" bitsize="32" type="int32"/>
<reg name="ds" bitsize="32" type="int32"/>
<reg name="es" bitsize="32" type="int32"/>
<reg name="fs" bitsize="32" type="int32"/>
<reg name="gs" bitsize="32" type="int32"/>
Run Code Online (Sandbox Code Playgroud)

从 gdb 中,您可以查看寄存器的类型:

(gdb) whatis $eax
type = int32_t
(gdb) whatis $ebp
type = void *
Run Code Online (Sandbox Code Playgroud)