其中两种功能强大的工具是 objdump 和 readelf 程序 。通过输入下面的命令,您可以看到目标文件中包含可执行代码的每个段的汇编清单 。对于这么一个小的程序,编译器生成了这么多的代码,真的很令人惊异!
objdump -d a.out
这个命令生成的输出如清单 3 所示 。每个可执行代码段将在需要特定的事件时执行,这些事件包括库的初始化和该程序本身主入口点 。
清单 3. objdump 命令的输出a.out: file format elf32-i386
Disassembly of section .init:
08048278 <_init>:
8048278:55 push雙
8048279:89 e5mov%esp,雙
804827b:83 ec 08sub$0x8,%esp
804827e:e8 61 00 00 00 call80482e4
8048283:e8 b3 00 00 00 call804833b
8048288:e8 9f 01 00 00 call804842c <__do_global_ctors_aux>
804828d:c9 leave
804828e:c3 ret
Disassembly of section .plt:
08048290 :
8048290:ff 35 78 95 04 08pushl 0x8049578
8048296:ff 25 7c 95 04 08jmp*0x804957c
804829c:00 00add%al,(陎)
...
080482a0 :
80482a0:ff 25 80 95 04 08jmp*0x8049580
80482a6:68 00 00 00 00 push$0x0
80482ab:e9 e0 ff ff ff jmp8048290 <_init 0x18>
080482b0 <__libc_start_main@plt>:
80482b0:ff 25 84 95 04 08jmp*0x8049584
80482b6:68 08 00 00 00 push$0x8
80482bb:e9 d0 ff ff ff jmp8048290 <_init 0x18>
Disassembly of section .text:
080482c0 <_start>:
80482c0:31 edxor雙,雙
80482c2:5e pop%esi
80482c3:89 e1mov%esp,靫
80482c5:83 e4 f0and$0xfffffff0,%esp
80482c8:50 push陎
80482c9:54 push%esp
80482ca:52 push韝
80482cb:68 e1 83 04 08 push$0x80483e1
80482d0:68 90 83 04 08 push$0x8048390
80482d5:51 push靫
80482d6:56 push%esi
80482d7:68 60 83 04 08 push$0x8048360
80482dc:e8 cf ff ff ff call80482b0 <__libc_start_main@plt>
80482e1:f4 hlt
80482e2:90 nop
80482e3:90 nop
080482e4
80482e4:55 push雙
80482e5:89 e5mov%esp,雙
80482e7:53 push離
80482e8:e8 1b 00 00 00 call8048308 <__i686.get_pc_thunk.bx>
80482ed:81 c3 87 12 00 00add$0x1287,離
80482f3:83 ec 04sub$0x4,%esp
80482f6:8b 83 fc ff ff ffmov0xfffffffc(離),陎
80482fc:85 c0test陎,陎
80482fe:74 02je 8048302
8048300:ff d0call*陎
8048302:83 c4 04add$0x4,%esp
8048305:5b pop離
8048306:5d pop雙
8048307:c3 ret
08048308 <__i686.get_pc_thunk.bx>:
8048308:8b 1c 24mov(%esp),離
804830b:c3 ret
0804830c <__do_global_dtors_aux>:
804830c:55 push雙
804830d:89 e5mov%esp,雙
804830f:83 ec 08sub$0x8,%esp
8048312:80 3d 94 95 04 08 00cmpb$0x0,0x8049594
8048319:74 0cje 8048327 <__do_global_dtors_aux 0x1b>
804831b:eb 1cjmp8048339 <__do_global_dtors_aux 0x2d>
804831d:83 c0 04add$0x4,陎
8048320:a3 90 95 04 08 mov陎,0x8049590
8048325:ff d2call*韝
8048327:a1 90 95 04 08 mov0x8049590,陎
804832c:8b 10mov(陎),韝
804832e:85 d2test韝,韝
8048330:75 ebjne804831d <__do_global_dtors_aux 0x11>
8048332:c6 05 94 95 04 08 01movb$0x1,0x8049594
8048339:c9 leave
804833a:c3 ret
0804833b
804833b:55 push雙
804833c:89 e5mov%esp,雙
804833e:83 ec 08sub$0x8,%esp
8048341:a1 a4 94 04 08 mov0x80494a4,陎
8048346:85 c0test陎,陎
8048348:74 12je 804835c
804834a:b8 00 00 00 00 mov$0x0,陎
804834f:85 c0test陎,陎
8048351:74 09je 804835c
8048353:c7 04 24 a4 94 04 08movl$0x80494a4,(%esp)
804835a:ff d0call*陎
804835c:c9 leave
804835d:c3 ret
804835e:90 nop
804835f:90 nop
08048360
8048360:55 push雙
推荐阅读
- 口令篇 UNIX操作系统的安全命令集
- 进行类Unix小型机系统管理的八项注意
- 类UNIX系统基础:文件安全与权限
- 在SCO Unix系统中实现业务数据的自动备份
- 构建SCO UNIX下的邮件系统
- sco unixware 7.1.1 全面学习资料
- SCO UNIX 系统下搭建电子邮件服务器
- undelete 如何在SCO UNIX下的反删除
- UNIX 常用指令介绍
- 对话 UNIX,第 7 部分: 命令行惯用语