ELF可执行格式文件转换成a.out格式分析工具

         elftoaout:
分析工具:
hexdump 首先当属hexdump,这是一个强大工具,它可以把可执行文件或目标文件转换成16进制数打印出来。
例如:
lzel@lzel-laptop:~/works/ASM/3/elftoaout$ hexdump -s 0 -n 52 -C e_elf
00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 03 00 01 00 00 00  60 80 04 08 34 00 00 00  |........`...4...|
00000020  c0 00 00 00 00 00 00 00  34 00 20 00 01 00 28 00  |........4. ...(.|
00000030  06 00 03 00                                       |....|
00000034
因为ELF格式文件的文件头固定为52字节,这样就打印出ELF的文件头的16进制。
注:
-s 是指要打印的文件的起始位置
-n 要显示的字节数
-C
指定要打印的格式(Display the input offset in hexadecimal, followed by sixteen
space-separated, two column, hexadecimal bytes,followed by the same
sixteen bytes in %_p format enclosed in ``|'' characters.)
详细参考 man hexdump
readelf 专门读取elf格式文件的工具
例如:
lzel@lzel-laptop:~/works/ASM/3/elftoaout$ readelf -h e_elf  //读取elf文件的文件头
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:               0x8048060
  Start of program headers:          52 (bytes into file)
  Start of section headers:          192 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         1
  Size of section headers:           40 (bytes)
  Number of section headers:         6
  Section header string table index: 3
这对分析elf格式文件有很大的帮助。
还有其他常用选项:
如:
-all //读取elf文件的所有信息
-l //显示每个段的段信息,如果有该段的话
其他参考 man readelf
nm 列出目标文件中的符号。缺省情况下,它会寻找一个名为 a.out 的文件。
例如:
lzel@lzel-laptop:~/works/ASM/3/elftoaout$ nm e_elf
0804906c A __bss_start
0804906c A _edata
0804906c A _end
08048060 T _start
详细介绍参考 man nm
objdump 可以用它看到目标文件中包含可执行代码的每个段的汇编清单
例如:
lzel@lzel-laptop:~/works/ASM/3/elftoaout$ objdump -d e_elf  //显示汇编程序包含可执行的段
e_elf:     file format elf32-i386
Disassembly of section .text:
08048060 :
8048060:       b8 01 00 00 00          mov    $0x1,%eax
8048065:       bb 02 00 00 00          mov    $0x2,%ebx
804806a:       cd 80                   int    $0x80
lzel@lzel-laptop:~/works/ASM/3/elftoaout$
还有许多 参考 man objdump
gdb 在运行中查看,终于体会到gdb 最为强大的一面:
参见Blog:
http://elfhack.whitecell.org/mydocs/ELF_symbol_resolve_process1.txt
这是这昨天学习到的工具的一些总结。
感觉要搞清这两种格式的转换需要先把每种格式在同种平台上的.h分析透才行。
最近对elf的动态加载过程很糊涂,老理不清楚,谁比较清楚,解释一下。
参考资料(也就是我最近在读的一些Bolg):
中文:
[1] UNIX 目标文件初探
http://www.ibm.com/developerworks/cn/aix/library/au-unixtools.html#N10115
[2] UNIX/LINUX 平台可执行文件格式分析 
http://blog.chinaunix.net/u/19881/showart_215242.html
[3] 从程序员角度看ELF 
http://www.xfocus.net/articles/200109/260.html
[4] 分析ELF的加载过程 
http://blog.chinaunix.net/u/5958/showart_32581.html
[5] UNIX/LINUX 平台可执行文件格式分析[转】
http://www.host01.com/article/server/00070002/0621409110659071.htm
[6] 结合实例解读ELF文件
http://www.xxlinux.com/linux/article/accidence/install/20070409/8124.html
[7] ELF动态解析符号过程(修订版)
http://elfhack.whitecell.org/mydocs/ELF_symbol_resolve_process1.txt
(这篇用gdb,实践很强)
英文(只读了一篇):
[1]Understanding ELF using readelf and objdump
http://www.linuxforums.org/misc/understanding_elf_using_readelf_and_objdump.html
[2]The ELF Object File Format by Dissection
http://www.linuxjournal.com/article/1060
[3]The Linux ELF HOWTO
http://www.educ.umu.se/~bjorn/linux/howto/ELF-HOWTO.html#toc1
[4]Study of ELF loading and relocs
http://netwinder.osuosl.org/users/p/patb/public_html/elf_relocs.html
[5]Notes on the Flat-Text Transcription
http://elfhack.whitecell.org/mydocs/elf.txt
(这篇理论最全面,本来有一篇中文翻译的,可惜现在打不开
http://elfhack.whitecell.org/mydocs/ELF_chinese.txt
)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值