ELF文件分析(1)
根据三星2440-led_on_c_elf#
1. ELF总体结构
2.ELF Header
重点说几个,其他查找相关资料
①这个是通过readelf 在linux下面打开的,通过读readelf原程序代码能更好的理解到Version: 0x01的内容
②Entry point address: 0x0 入口地址,规定ELF程序的入口虚拟地址,操作系统在加载完该程序后从这个地址开始执行进程的命令。
③Start of program headers: 52 (bytes into file)
Start of section headers: 33524 (bytes into file)
这两个是从文件头即(此程序0x00)开始的偏移量,例如#33524为0x82f4,可根据结构表中看到section header的开始地址,然后Size of section headers: 40 (bytes) 乘以 Number of section headers: 14 等于=#560(0x280)即为section header的整个大小为0x280
④Section header string table index: 11这个是段字符串表(.shstrtab)所在的段 在 段表(section header)中的 下表。
3.section Header(段表)
①段表的地址的确定,和地址的大小,段的个数,在elf header头文件中都能确定。
②这里有13个段,一共是560bytes,简单的说:.text保存命令,.data保存数据,.bss大小为0(没有给bss在内存中开地址空间)。
③off的值用来确定0x00+偏移量(off值)=开始地址
④Al(sh_addralign)当为0/1时没有对齐要求
如果一个32位的数据没有存放在4字节整除的内存地址处,那么处理器就需要2个总线周期对其进行访问,显然访问效率下降很多。比如4字节数据的起始地址应位于4字节边界上,即起始地址能够被4整除。
http://www.cnblogs.com/clover-toeic/p/3853132.html
⑤关于bss的问题
⑥.shstrtab段名表,标号为11对应的 elf头表中的最后一行
⑦通过xxd查看.strtab内容