Android 010工具读取elf文件头部数据与分析
背景
查看elf头的信息,结合010工具查看头信息。
环境
macOS 12.6, 010 12.0.1
读取文件
010打开目标文件libc.so,这个文件是从12系统中导出,在010中打开后是这样的。
如果没有模板,在Templates中搜索elf,点击安装即可,安装完成后重启010,再打开libc。展开struct file可以看到elf_header,点击这个位置,选中后上面十六进制文件显示区颜色会改变,点击的位置就是上面灰色的位置了。
对比代码读取的信息和elf头部字段的解释
标记了前面e_ident的信息和下面几个常用信息。
可以看到,010工具查看比较直观,这些信息和c读取到的一致。
下面是ph和sh的头表信息
ehsize
头大小
在010editor中查看ELF信息时,Elf64_Half e_ehsize_ELF_HEADER_SIZE 64 34h 2h
是表示ELF头部大小的字段的展示。
-
Elf64_Half e_ehsize_ELF_HEADER_SIZE
:这是字段的名称,Elf64_Half
是字段的类型,e_ehsize_ELF_HEADER_SIZE
是字段的标识符。 -
64
:这是字段的值,表示ELF头部的大小是64字节。 -
34h
:这是字段在文件中的偏移位置,h
表示这是一个十六进制数,34h
等于十进制的52,所以这个字段在文件中的偏移位置是第52个字节。 -
Xnip2024-03-05_15-39-55 -
2h
:这是字段的大小,h
表示这是一个十六进制数,2h
等于十进制的2,所以这个字段的大小是2字节。这里2字节完整的应该是0x0040,小端。
在c语言中,elf_header.e_ehsize = 0x40
是将e_ehsize字段的值设置为0x40,0x40是64的十六进制表示,所以这个值表示ELF头部的大小是64字节,这与010editor中展示的结果是一致的。32位的ELF header占52个字节,64位的ELF header占64个字节。
原文始发于微信公众号(安全后厨):Android 010工具读取elf文件头部数据与分析