曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5539|回复: 0
打印 上一主题 下一主题

GNU objdump

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2009-11-23 01:25:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
objdump 是 binutils 包中的一个非常有用的工具。我们经常会查看目标代码文件中由编译器生成的指令码,而 objdump 不仅能够显示汇编语言代码,而且还能够显示生成的原始指令码。可以通过 man 来查看 objdump 的命令格式。

下表为命令行参数简要说明
参数
描述
-a
如果任何文件是存档文件,则显示存档头信息
-b
指定目标代码文件的目标代码格式
-C
将低级符号还原为用户级别的名称
-d
把目标代码反汇编为指令码
-D
把所有段反汇编为指令码,包括数据
-EB
指定大端格式(big-endian)目标文件
-EL
指定小端格式(little-endian)目标文件
-f
显示每个文件头的摘要信息
-G
显示调试段的内容
-h
显示每个文件段头的摘要信息
-i
显示所有架构和目标格式的清单
-j
只显示指定段的信息
-l
使用源代码行号标记输出
-m
指定进行反汇编时使用的架构
-p
显示目标文件格式特有的信息
-r
显示文件中的重定位条目
-R
显示文件中的动态重定位条目
-s
显示指定段的完整内容
-S
交错显示源代码和反汇编后的代码
-t
显示文件的符号表条目
-T
显示文件的动态符号表条目
-x
显示文件所有可用的头信息
--start-address
开始显示在指定地址上的数据
--stop-address
停止显示在指定地址上的数据

在众多参数中,-d 参数最有意思,因为它显示反汇编后的目标代码文件。现在以 hello world 为例,hello.c 代码为:
#include <stdio.h>
#include <stdlib.h>

int main()
{
        printf ("hello world\n");
        exit (0);
}
使用 gcc 的 -c 参数编译源程序,创建用于转储的目标文件
gcc -c hello.c

生成 hello.o 目标文件,现在用 objdump 及 -d 参数查看 hello.o 文件
beyes@beyes-groad:~/programming$ objdump -d hello.o

hello.o:     file format elf32-i386


Disassembly of section .text:

00000000 <main>:
   0:    55                       push   %ebp
   1:    89 e5                    mov    %esp,%ebp
   3:    83 e4 f0                 and    $0xfffffff0,%esp
   6:    83 ec 10                 sub    $0x10,%esp
   9:    c7 04 24 00 00 00 00     movl   $0x0,(%esp)
  10:    e8 fc ff ff ff           call   11 <main+0x11>
  15:    c7 04 24 00 00 00 00     movl   $0x0,(%esp)
  1c:    e8 fc ff ff ff           call   1d <main+0x1d>

编译器版本的不同上面 dump 出的结果也会有所差别。有另外一篇介绍 objdump 的帖子:http://www.groad.net/bbs/read.php?tid-784.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-16 08:26 , Processed in 0.063732 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表