ELF说明
来源:互联网 发布:开淘宝店怎么上传视频 编辑:程序博客网 时间:2024/06/07 04:59
windows可执行文件格式为PE格式(可移植的可执行的文件Portable Executable),而linux下可执行文件时ELF格式。
- 常用扩展名
- 0,so,elf,prx
- 开发者
- Unix系统实验室
ELF文件组成部分
ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且他们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。[1]
ELF header编辑名称大小对齐用途Elf32_Addr44无符号程序地址Elf32_Half22无符号中等大小整数Elf32_Off44无符号文件偏移Elf32_Sword44有符号大整数Elf32_Word44无符号大整数unsigned char11无符号小整数
ELF格式代码如下:
#define EI_NIDENT 16
typedef struct{
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
}Elf32_Ehdr;
typedef struct{
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
}Elf32_Ehdr;
ELF数据类型说明:
ELF代码项含义:
最开头是16个字节的e_ident, 其中包含用以表示ELF文件的字符,以及其他一些与机器无关的信息。开头的4个字节值固定不变,为0x7f和ELF三个字符。
e_type 它标识的是该文件的类型。
e_machine 表明运行该程序需要的体系结构。
e_version 表示文件的版本。
e_entry 程序的入口地址。
e_phoff 表示Program header table 在文件中的偏移量(以字节计数)。
e_shoff 表示Section header table 在文件中的偏移量(以字节计数)。
e_flags 对IA32而言,此项为0。
e_ehsize 表示ELF header大小(以字节计数)。
e_phentsize 表示Program header table中每一个条目的大小。
e_phnum 表示Program header table中有多少个条目。
e_shentsize 表示Section header table中的每一个条目的大小。
e_shnum 表示Section header table中有多少个条目。
e_shstrndx 包含节名称的字符串是第几个节(从零开始计数)。[1]
ELFProgram header
Program header描述的是一个段在文件中的位置、大小以及它被放进内存后所在的位置和大小。
ELF格式代码如下:
typedef struct {
Elf32_Wordp_type;
Elf32_Offp_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
Elf32_Wordp_filesz;
Elf32_Word p_memsz;
Elf32_Word p_flags;
Elf32_Word p_align;
}
ELF代码项含义:
p_type 当前Program header所描述的段的类型。
p_offset 段的第一个字节在文件中的偏移。
p_vaddr 段的一个字节在内存中的虚拟地址
p_paddr 在物理内存定位相关的系统中,此项是为物理地址保留。
p_filesz 段在文件中的长度。
p_memsz 段在内存中的长度。
p_flags 与段相关的标志。
p_align 根据此项值来确定段在文件及内存中如何对齐。
下面摘录自:http://blog.chinaunix.net/uid-24148050-id-362928.html
文件的内容:
1. BIN文件是 raw binary 文件,这种文件只包含机器码。
2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。
所以ELF文件的体积比对应的BIN文件要大。
文件的执行:
1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;
FILE *fp = fopen("vmlinux.bin", "rb");
fread(VMLINUX_START, 1, VMLINUX_SIZE, fp);
((void (*)(void))VMLINUX_START)();
2. 执行ELF程序则需要一个ELF Loader。
现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的
所以烧在flash上的文件只能是raw binary格式的,即镜像文件image
文件的转换:
1. 通过gcc编译出来的是elf文件
2. 通过objcpy可以把elf文件转换为bin文件
1. BIN文件是 raw binary 文件,这种文件只包含机器码。
2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。
所以ELF文件的体积比对应的BIN文件要大。
文件的执行:
1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行;
FILE *fp = fopen("vmlinux.bin", "rb");
fread(VMLINUX_START, 1, VMLINUX_SIZE, fp);
((void (*)(void))VMLINUX_START)();
2. 执行ELF程序则需要一个ELF Loader。
现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的
所以烧在flash上的文件只能是raw binary格式的,即镜像文件image
文件的转换:
1. 通过gcc编译出来的是elf文件
2. 通过objcpy可以把elf文件转换为bin文件
编译完uboot后生成:
u-boot ELF文件可用来调试
u-boot.bin BIN文件用来烧在Flash上
u-boot ELF文件可用来调试
u-boot.bin BIN文件用来烧在Flash上
文件的调试:
1. 我们调试一般都是使用elf文件,比如:
2. bin文件比较杯具,里面全是机器码,所以只能反汇编
全是汇编代码......+_+
1. 我们调试一般都是使用elf文件,比如:
- nm elf文件 #得到符号表
- objdump -D elf文件 #反汇编,且汇编代码与源码混排
2. bin文件比较杯具,里面全是机器码,所以只能反汇编
- objdump -b binary -m powerpc uboot.bin
阅读全文
0 0
- ELF说明
- elf文件格式说明
- BIN/HEX/AXF/ELF文件说明
- BIN/HEX/AXF/ELF文件说明
- ELF格式文件特点的简单说明
- ELF
- ELF
- Elf
- elf
- elf
- ELF
- ELF
- ARM开发各种烧写文件格式说明(ELF、HEX、BIN)
- ELF(二)ELF头
- elf文件格式
- elf文件格式
- elf文件格式
- ELF文件格式
- Linux基础操作(十二)————虚拟机管理
- 学习笔记——事件处理程序(HTML事件处理、DOM0、DOM2)
- 解决Eclipse进行OSGI调试时出现Could not find bundle: org.eclipse.equinox.console的问题
- enum枚举类型
- MVC模式信息查询
- ELF说明
- selenium+eclipse+foxfire安装
- 两个单链表的相交问题,第一个公共结点
- 软件模块化设计的思路
- JAVA泛型杂谈--擦除,协变,逆变,通配符等
- Equals方法(Java)
- 反射机制,实例化类,获得类的属性和行为
- 第七周 项目一 建立顺序环形队列算法库
- 软件包管理