首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux中ELF格式文件介绍(4)

Linux中ELF格式文件介绍(4)

2 objcopy工具
objcopy可以把一种目标文件中的内容复制到另一种类型的目标文件中.
通过objcopy的各种选项,可以对目标文件进行各种类型的操作。例如去掉可执行文件的调试信息(效果等同于strip)等等,具体需要做什么操作,要求我们对elf文件中每个部分的内容有所理解。
这里只给出一个例子:
*使用objcopy把.comment段和.note段的信息去掉:
$ objcopy -R .comment -R .note hello hello.min
这里,hello是一个可执行文件,通过"readelf -l hello"或者"readelf -S hello"命令可以知道文件中包含一个.note段和.comment段,通过这个命令,将这两个段从文件中删除,不会改变原来的文件,而是将删除了这些信息的文件存放在hello.min中。实际通过这个方法,可以减少可执行文件的大小,且不影响可执行文件的功能。
项的含义是:
-R .note -R .comment 表示移掉 .note 与 .comment 段
-O binary xyb xyb.bin 表示由xyb生成二进制文件xyb.bin

3 objdump工具
objdump是用查看目标文件或者可执行的目标文件的构成的GCC工具。
以下给出几个常用的例子:
*输出目标文件的所有段概括:
# objdump -h main
输入之后,输出信息大致如下:
main:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
0 .interp       00000013  08048134  08048134  00000134  2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020  08048148  08048148  00000148  2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .gnu.hash     00000030  08048168  08048168  00000168  2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .dynsym       000000d0  08048198  08048198  00000198  2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .dynstr       00000183  08048268  08048268  00000268  2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .gnu.version  0000001a  080483ec  080483ec  000003ec  2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .gnu.version_r 00000060  08048408  08048408  00000408  2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .rel.dyn      00000010  08048468  08048468  00000468  2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .rel.plt      00000048  08048478  08048478  00000478  2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .init         00000017  080484c0  080484c0  000004c0  2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
10 .plt          000000a0  080484d8  080484d8  000004d8  2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
11 .text         00000238  08048580  08048580  00000580  2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .fini         0000001c  080487b8  080487b8  000007b8  2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .rodata       00000013  080487d4  080487d4  000007d4  2**2
......其余内容省略......
这里,main是一个可执行文件。

*输出目标文件的符号表:
# objdump -t main
输入之后,输出类似如下:
main:     file format elf32-i386

SYMBOL TABLE:
08048134 l    d  .interp        00000000              .interp
08048148 l    d  .note.ABI-tag  00000000              .note.ABI-tag
08048168 l    d  .gnu.hash      00000000              .gnu.hash
08048198 l    d  .dynsym        00000000              .dynsym
08048268 l    d  .dynstr        00000000              .dynstr
080483ec l    d  .gnu.version   00000000              .gnu.version
08048408 l    d  .gnu.version_r 00000000              .gnu.version_r
08048468 l    d  .rel.dyn       00000000              .rel.dyn
08048478 l    d  .rel.plt       00000000              .rel.plt
080484c0 l    d  .init  00000000              .init
080484d8 l    d  .plt   00000000              .plt
08048580 l    d  .text  00000000              .text
080487b8 l    d  .fini  00000000              .fini
080487d4 l    d  .rodata        00000000              .rodata
080487e8 l    d  .eh_frame_hdr  00000000              .eh_frame_hdr
08048824 l    d  .eh_frame      00000000              .eh_frame
08049914 l    d  .ctors 00000000              .ctors
08049920 l    d  .dtors 00000000              .dtors
08049928 l    d  .jcr   00000000              .jcr
0804992c l    d  .dynamic       00000000              .dynamic
08049a0c l    d  .got   00000000              .got
08049a10 l    d  .got.plt       00000000              .got.plt
08049a40 l    d  .data  00000000              .data
08049a48 l    d  .bss   00000000              .bss
00000000 l    d  .comment       00000000              .comment
080485a4 l     F .text  00000000              call_gmon_start
00000000 l    df *ABS*  00000000              crtstuff.c
08049914 l     O .ctors 00000000              __CTOR_LIST__
08049920 l     O .dtors 00000000              __DTOR_LIST__
08049928 l     O .jcr   00000000              __JCR_LIST__
08049ad4 l     O .bss   00000004              dtor_idx.5793
08049ad8 l     O .bss   00000001              completed.5791
080485d0 l     F .text  00000000              __do_global_dtors_aux
......其余信息省略......
继承事业,薪火相传
返回列表