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?
该命令以原始格式(十六进制)和自然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)
| 归档时间: |
|
| 查看次数: |
2637 次 |
| 最近记录: |