对于那些着迷于底层编程细节的程序员来说,这是一个功能非常强大的工具,可用于研究编译器和汇编器的输出。细节信息,比如这段代码中所显示的这些信息,可以揭示有关本地处理器本身运行方式的很多内容。对该处理器制造商提供的技术文档进行深入的研究,您可以收集关于一些有价值的信息,通过这些信息可以深入地了解内部的运行机制,因为功能程序提供了清晰的输出。
类似地,readelf 程序也可以清楚地列出目标文件中的内容。输入下面的命令,您将可以看到这一点:
readelf -all a.out |
这个命令生成的输出如清单 4 所示。ELF Header 为该文件中所有段入口显示了详细的摘要。在列举出这些 Header 中的内容之前,您可以看到 Header 的具体数目。在研究一个较大的目标文件时,该信息可能非常有用。
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x80482c0
Start of program headers: 52 (bytes into file)
Start of section headers: 3504 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 7
Size of section headers: 40 (bytes)
Number of section headers: 34
Section header string table index: 31
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .interp PROGBITS 08048114 000114 000013 00 A 0 0 1
[ 2] .note.ABI-tag NOTE 08048128 000128 000020 00 A 0 0 4
[ 3] .hash HASH 08048148 000148 00002c 04 A 4 0 4
[ 4] .dynsym DYNSYM 08048174 000174 000060 10 A 5 1 4
[ 5] .dynstr STRTAB 080481d4 0001d4 00005e 00 A 0 0 1
[ 6] .gnu.version VERSYM 08048232 000232 00000c 02 A 4 0 2
[ 7] .gnu.version_r VERNEED 08048240 000240 000020 00 A 5 1 4
[ 8] .rel.dyn REL 08048260 000260 000008 08 A 4 0 4
[ 9] .rel.plt REL 08048268 000268 000010 08 A 4 11 4
[10] .init PROGBITS 08048278 000278 000017 00 AX 0 0 1
[11] .plt PROGBITS 08048290 000290 000030 04 AX 0 0 4
[12] .text PROGBITS 080482c0 0002c0 000198 00 AX 0 0 4
[13] .fini PROGBITS 08048458 000458 00001d 00 AX 0 0 1
[14] .rodata PROGBITS 08048478 000478 000015 00 A 0 0 4
[15] .eh_frame PROGBITS 08048490 000490 000004 00 A 0 0 4
[16] .ctors PROGBITS 08049494 000494 000008 00 WA 0 0 4
[17] .dtors PROGBITS 0804949c 00049c 000008 00 WA 0 0 4
[18] .jcr PROGBITS 080494a4 0004a4 000004 00 WA 0 0 4
[19] .dynamic DYNAMIC 080494a8 0004a8 0000c8 08 WA 5 0 4
[20] .got PROGBITS 08049570 000570 000004 04 WA 0 0 4
[21] .got.plt PROGBITS 08049574 000574 000014 04 WA 0 0 4
[22] .data PROGBITS 08049588 000588 00000c 00 WA 0 0 4
[23] .bss NOBITS 08049594 000594 000004 00 WA 0 0 4
[24] .comment PROGBITS 00000000 000594 000126 00 0 0 1
[25] .debug_aranges PROGBITS 00000000 0006c0 000088 00 0 0 8
[26] .debug_pubnames PROGBITS 00000000 000748 000025 00 0 0 1
[27] .debug_info PROGBITS 00000000 00076d 00022b 00 0 0 1
[28] .debug_abbrev PROGBITS 00000000 000998 000076 00 0 0 1
[29] .debug_line PROGBITS 00000000 000a0e 0001bb 00 0 0 1
[30] .debug_str PROGBITS 00000000 000bc9 0000bf 01 MS 0 0 1
[31] .shstrtab STRTAB 00000000 000c88 000127 00 0 0 1
[32] .symtab SYMTAB 00000000 001300 000520 10 33 63 4
[33] .strtab STRTAB 00000000 001820 0002d2 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings)
I (info), L (link order), G (group), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)
There are no section groups in this file.
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000034 0x08048034 0x08048034 0x000e0 0x000e0 R E 0x4
INTERP 0x000114 0x08048114 0x08048114 0x00013 0x00013 R 0x1
[Requesting program interpreter: /lib/ld-linux.so.2]
LOAD 0x000000 0x08048000 0x08048000 0x00494 0x00494 R E 0x1000
LOAD 0x000494 0x08049494 0x08049494 0x00100 0x00104 RW 0x1000
DYNAMIC 0x0004a8 0x080494a8 0x080494a8 0x000c8 0x000c8 RW 0x4
NOTE 0x000128 0x08048128 0x08048128 0x00020 0x00020 R 0x4
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
Section to Segment mapping:
Segment Sections...
00
01 .interp
02 .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version
.gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .eh_frame
03 .ctors .dtors .jcr .dynamic .got .got.plt .data .bss
04 .dynamic
05 .note.ABI-tag
06
Dynamic section at offset 0x4a8 contains 20 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0x8048278
0x0000000d (FINI) 0x8048458
0x00000004 (HASH) 0x8048148
0x00000005 (STRTAB) 0x80481d4
0x00000006 (SYMTAB) 0x8048174
0x0000000a (STRSZ) 94 (bytes)
0x0000000b (SYMENT) 16 (bytes)
0x00000015 (DEBUG) 0x0
0x00000003 (PLTGOT) 0x8049574
0x00000002 (PLTRELSZ) 16 (bytes)
0x00000014 (PLTREL) REL
0x00000017 (JMPREL) 0x8048268
0x00000011 (REL) 0x8048260
0x00000012 (RELSZ) 8 (bytes)
0x00000013 (RELENT) 8 (bytes)
0x6ffffffe (VERNEED) 0x8048240
0x6fffffff (VERNEEDNUM) 1
0x6ffffff0 (VERSYM) 0x8048232
0x00000000 (NULL) 0x0
Relocation section '.rel.dyn' at offset 0x260 contains 1 entries:
Offset Info Type Sym.Value Sym. Name
08049570 00000506 R_386_GLOB_DAT 00000000 __gmon_start__
Relocation section '.rel.plt' at offset 0x268 contains 2 entries:
Offset Info Type Sym.Value Sym. Name
08049580 00000107 R_386_JUMP_SLOT 00000000 puts
08049584 00000207 R_386_JUMP_SLOT 00000000 __libc_start_main
There are no unwind sections in this file.
Symbol table '.dynsym' contains 6 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 378 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.0 (2)
2: 00000000 230 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.0 (2)
3: 0804847c 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used
4: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
5: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
Symbol table '.symtab' contains 82 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 08048114 0 SECTION LOCAL DEFAULT 1
2: 08048128 0 SECTION LOCAL DEFAULT 2
3: 08048148 0 SECTION LOCAL DEFAULT 3
4: 08048174 0 SECTION LOCAL DEFAULT 4
5: 080481d4 0 SECTION LOCAL DEFAULT 5
6: 08048232 0 SECTION LOCAL DEFAULT 6
7: 08048240 0 SECTION LOCAL DEFAULT 7
8: 08048260 0 SECTION LOCAL DEFAULT 8
9: 08048268 0 SECTION LOCAL DEFAULT 9
10: 08048278 0 SECTION LOCAL DEFAULT 10
11: 08048290 0 SECTION LOCAL DEFAULT 11
12: 080482c0 0 SECTION LOCAL DEFAULT 12
13: 08048458 0 SECTION LOCAL DEFAULT 13
14: 08048478 0 SECTION LOCAL DEFAULT 14
15: 08048490 0 SECTION LOCAL DEFAULT 15
16: 08049494 0 SECTION LOCAL DEFAULT 16
17: 0804949c 0 SECTION LOCAL DEFAULT 17
18: 080494a4 0 SECTION LOCAL DEFAULT 18
19: 080494a8 0 SECTION LOCAL DEFAULT 19
20: 08049570 0 SECTION LOCAL DEFAULT 20
21: 08049574 0 SECTION LOCAL DEFAULT 21
22: 08049588 0 SECTION LOCAL DEFAULT 22
23: 08049594 0 SECTION LOCAL DEFAULT 23
24: 00000000 0 SECTION LOCAL DEFAULT 24
25: 00000000 0 SECTION LOCAL DEFAULT 25
26: 00000000 0 SECTION LOCAL DEFAULT 26
27: 00000000 0 SECTION LOCAL DEFAULT 27
28: 00000000 0 SECTION LOCAL DEFAULT 28
29: 00000000 0 SECTION LOCAL DEFAULT 29
30: 00000000 0 SECTION LOCAL DEFAULT 30
31: 00000000 0 SECTION LOCAL DEFAULT 31
32: 00000000 0 SECTION LOCAL DEFAULT 32
33: 00000000 0 SECTION LOCAL DEFAULT 33
34: 00000000 0 FILE LOCAL DEFAULT ABS abi-note.S
35: 00000000 0 FILE LOCAL DEFAULT ABS ../sysdeps/i386/elf/start
36: 00000000 0 FILE LOCAL DEFAULT ABS init.c
37: 00000000 0 FILE LOCAL DEFAULT ABS initfini.c
38: 00000000 0 FILE LOCAL DEFAULT ABS /build/buildd/glibc-2.3.6
39: 080482e4 0 FUNC LOCAL DEFAULT 12 call_gmon_start
40: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
41: 08049494 0 OBJECT LOCAL DEFAULT 16 __CTOR_LIST__
42: 0804949c 0 OBJECT LOCAL DEFAULT 17 __DTOR_LIST__
43: 080494a4 0 OBJECT LOCAL DEFAULT 18 __JCR_LIST__
44: 08049594 1 OBJECT LOCAL DEFAULT 23 completed.4463
45: 08049590 0 OBJECT LOCAL DEFAULT 22 p.4462
46: 0804830c 0 FUNC LOCAL DEFAULT 12 __do_global_dtors_aux
47: 0804833b 0 FUNC LOCAL DEFAULT 12 frame_dummy
48: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
49: 08049498 0 OBJECT LOCAL DEFAULT 16 __CTOR_END__
50: 080494a0 0 OBJECT LOCAL DEFAULT 17 __DTOR_END__
51: 08048490 0 OBJECT LOCAL DEFAULT 15 __FRAME_END__
52: 080494a4 0 OBJECT LOCAL DEFAULT 18 __JCR_END__
53: 0804842c 0 FUNC LOCAL DEFAULT 12 __do_global_ctors_aux
54: 00000000 0 FILE LOCAL DEFAULT ABS initfini.c
55: 00000000 0 FILE LOCAL DEFAULT ABS /build/buildd/glibc-2.3.6
56: 00000000 0 FILE LOCAL DEFAULT ABS hw.c
57: 080494a8 0 OBJECT LOCAL HIDDEN 19 _DYNAMIC
58: 08049494 0 NOTYPE LOCAL HIDDEN ABS __fini_array_end
59: 08049494 0 NOTYPE LOCAL HIDDEN ABS __fini_array_start
60: 08049494 0 NOTYPE LOCAL HIDDEN ABS __init_array_end
61: 08049574 0 OBJECT LOCAL HIDDEN 21 _GLOBAL_OFFSET_TABLE_
62: 08049494 0 NOTYPE LOCAL HIDDEN ABS __init_array_start
63: 08048478 4 OBJECT GLOBAL DEFAULT 14 _fp_hw
64: 0804958c 0 OBJECT GLOBAL HIDDEN 22 __dso_handle
65: 080483e1 74 FUNC GLOBAL DEFAULT 12 __libc_csu_fini
66: 00000000 378 FUNC GLOBAL DEFAULT UND puts@@GLIBC_2.0
67: 08048278 0 FUNC GLOBAL DEFAULT 10 _init
68: 080482c0 0 FUNC GLOBAL DEFAULT 12 _start
69: 08048390 81 FUNC GLOBAL DEFAULT 12 __libc_csu_init
70: 08049594 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
71: 08048360 47 FUNC GLOBAL DEFAULT 12 main
72: 00000000 230 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_
73: 08049588 0 NOTYPE WEAK DEFAULT 22 data_start
74: 08048458 0 FUNC GLOBAL DEFAULT 13 _fini
75: 08049594 0 NOTYPE GLOBAL DEFAULT ABS _edata
76: 08048308 0 FUNC GLOBAL HIDDEN 12 __i686.get_pc_thunk.bx
77: 08049598 0 NOTYPE GLOBAL DEFAULT ABS _end
78: 0804847c 4 OBJECT GLOBAL DEFAULT 14 _IO_stdin_used
79: 08049588 0 NOTYPE GLOBAL DEFAULT 22 __data_start
80: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
81: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
Histogram for bucket list length (total of 3 buckets):
Length Number % of total Coverage
0 0 ( 0.0%)
1 1 ( 33.3%) 20.0%
2 2 ( 66.7%) 100.0%
Version symbols section '.gnu.version' contains 6 entries:
Addr: 0000000008048232 Offset: 0x000232 Link: 4 (.dynsym)
000: 0 (*local*) 2 (GLIBC_2.0) 2 (GLIBC_2.0) 1 (*global*)
004: 0 (*local*) 0 (*local*)
Version needs section '.gnu.version_r' contains 1 entries:
Addr: 0x0000000008048240 Offset: 0x000240 Link to section: 5 (.dynstr)
000000: Version: 1 File: libc.so.6 Cnt: 1
0x0010: Name: GLIBC_2.0 Flags: none Version: 2
Notes at offset 0x00000128 with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_VERSION (version)
上一篇:基于libmad 的简单MP3流媒体播放器的实现 下一篇:用 PHP 读取文件的正确方法 更多相关文章
|
推荐文章
精彩文章
|