elf
Linux系统上运行的可执行程序是可以是a.out或elf, elf文件开头4个字节,格式为 "0x7F"、"E"、"L"、"F"; 十六进制: 7F 45 4C 46。提一下a.out,它是assembler output (汇编程序输出)的缩写形式。老式的BSD文档里甚至有下面的提示:a.out - 汇编程序和链接编辑输出格式。
bin
原始的二进制格式,内部没有地址标记,二进制格式下载,绝对地址烧写到Flash中就可以启动了;如果下载运行,则下载到编译时的地址。
hex
HEX 文件是记录文件行的ASCII文本文件,在 hex 文件中,每一行是一个hex记录,由十六进制数组成的机器码或者数据常量。hex常用于将程序或数据烧写到 ROM,EPROM。
文件的内容:
1. BIN文件是 raw binary 文件,这种文件只包含机器码。
2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。
文件的执行:
1. 执行raw binary只需要将程序加载到其起始地址;
2. 执行ELF程序则需要一个ELF Loader。
uboot 和 Linux kernel 启动的时候是没有ELF Loader的,所以烧在flash上的文件只能是raw binary格式的,即镜像文件image。
文件的调试:
1. elf文件调试一般使用:
nm vmlinux # 得到符号表
objdump -s vmlinux # 反汇编,且汇编代码与源码混排
2. bin文件里面全是机器码,只能反汇编
objdump -D -b binary -m arm xxx.bin > xxx.s
-D 反编译所有代码
-m 主机类型, arm
-b 文件格式, binary