gdb - 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中< >字体中的那些数字是什么?我只能访问 rip 指向的内存。
您正在处理一个与位置无关的可执行文件,该可执行文件链接到 load at address 0
,但在运行时被重定位到不同的地址(在您的情况下为0x555555554000
)。
您可能disas
在运行应用程序之前执行(即在重定位发生之前)。相反,如果您这样做:
(gdb) start
(gdb) disas main
然后 GDB 将向您显示重新定位的指令。
推荐阅读
- sql - 限制顶部对列
- r - 计算 R 中数据框中包含组合的行数
- javascript - For Loop 没有运行可汗学院项目:书架
- url-rewriting - .htaccess 将一个文件夹重写为 http - 所有其他文件夹重写为 https
- java - deleteRow(Java MySQL 连接器不工作)
- eclipse - Gradle run/build 不能正确显示中文
- r - 使用 rvest 和 purrr 从多个链接中提取数据
- c - 为什么xv6的调度器算法中有continue语句?
- javascript - 向名称添加序号后缀以使记录唯一
- rust - 编写一个包含字符串并且可以在常量中使用的 Rust 结构类型