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
)
分析工具:
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
)