首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gdb和objdump进行调试

使用gdb和objdump进行调试
EN

Stack Overflow用户
提问于 2014-03-12 20:35:36
回答 2查看 14.1K关注 0票数 3

我有很多关于gdb和objdump的问题。

objdump中的地址

如果我这样做了: objdump -d二进制文件名,那么我将得到包含以下部分的输出:

代码语言:javascript
复制
Disassembly of section .text:

080484a0 <_start>:
 80484a0:   31 ed                   xor    %ebp,%ebp
 80484a2:   5e                      pop    %esi
 80484a3:   89 e1                   mov    %esp,%ecx

我假设第一列中的这些数字是地址?但是我不明白如何知道这些地址,因为当一个进程被加载时,它被放置在内存中的一个随机位置,这意味着代码每次都有不同的地址?还是这些地址相对于进程的地址空间?

在<_start>下列出的值是什么?

GDB逐步通过代码

我有一个二进制文件,我没有源代码。我想通过这个程序,但没有符号信息。我不能在函数名或linenumber上设置断点。我试图在一个地址上设置一个断点,但是我不知道如何一步一步地完成这个程序。当我这样做:(gdb) s或(gdb) n时,它说它没有行信息,只运行整个函数。是否有办法通过它,或逐步通过组装说明?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-12 22:51:35

是的,第一列是地址列。可执行文件是在特定地址加载的(每个部分都有自己的地址),除非它们被特别标记为饼(独立位置可执行),在这种情况下,显示的地址将从0开始,并且实际上只是与随机加载地址的抵消。但是,在默认情况下,共享库的位置是独立的,并且可以映射到不同的地址。

第二列是机器代码本身:程序是存储在内存中的字节序列,以及处理器实际看到和执行的内容。

如果您没有调试信息,可以使用stepinexti (分别是简表sini )。如果您不使用一些GUI前端,那么layout asm和朋友也可能是有用的。

票数 8
EN

Stack Overflow用户

发布于 2018-09-18 00:20:20

要添加@Jester的注释,还可以使用'x‘命令来检查指令,例如,在达到gdb设置的断点之后,可以编写

代码语言:javascript
复制
(gdb) x/10xb *[address] (to get next 10 bytes of instructions)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22363215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档