首页 > 解决方案 > gdb 中的这些数字是多少?

问题描述

我在 gdb 中反汇编了我的 C 代码(只是 printf("hello world") ),我得到了

0x0000000000001135 <+0>: push rbp 
0x0000000000001136 <+1>: mov rbp,rsp
0x0000000000001139 <+4>: lea rdi [rip+0xec4] # 0x2004
0x0000000000001140 <+11>: mov eax,0x0
0x0000000000001145 <+16>: call 0x1030 <printf@plt>
0x000000000000114a <+21>: mov eax,0x0 
0x000000000000114f <+26>: pop rbp
0x0000000000001150 <+27>: ret 

我将断点设置为主要和考试翻录寄存器。

rip            0x555555555139   0x555555555139 <main+4>

gdb中< >字体中的那些数字是什么?我只能访问 rip 指向的内存。

如果这些数字不是记忆,我可以更改使 gdb 显示内存的格式吗?

对不起,我的英语不好。

标签: gdb

解决方案


gdb中< >字体中的那些数字是什么?我只能访问 rip 指向的内存。

您正在处理一个与位置无关的可执行文件,该可执行文件链接到 load at address 0,但在运行时被重定位到不同的地址(在您的情况下为0x555555554000)。

您可能disas 运行应用程序之前执行(即在重定位发生之前)。相反,如果您这样做:

(gdb) start
(gdb) disas main

然后 GDB 将向您显示重新定位的指令。


推荐阅读