- UID
- 1029342
- 性别
- 男
|
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
......其余信息省略...... |
|