通过命令greadelf -a xxxso和gobjdump -x xxxso以及readelf这三个命令得到so的信息
我个人常用readelf命令,具体指令的使用可参考 readelf命令使用说明
运行下述命令:
brew update
brew install binutils
ELF Header:
Section Headers:前言:在逆向工作流程中,我们会接触到so文件,并且在某种情况下会对so文件进行处理。 在文件的角度而言,so隶属于 ELF 文件。 站在ELF文件角度来分析一下so文件。
ELF 文件大致分为3个主要部分
1、ELF HEAD --ELF文件头部分
2、 Program Header Table --程序头表
3、Section Header Table --节头表
这个部分称为“头”,里面大致描述在这个文件里面的组织。如:文件魔术、目标架构体系(如ARM、X86)、版本信息、各个部分的大小、各个部分的偏移起始地址等等。
下面描述的位置都是固定的,且位置都是紧接着下一部分的位置。(有误欢迎指出)
这里我用的是IDA的android_server文件做演示,来简单看一部分内容。
文件的标识信息(e_ident):前16字节 (包括魔术部分:前4字节 如ELF)
文件类型(e_type ):2字节
目标架构(e_machine ):2字节
版本(e_version):4字节
程序入口虚拟地址(e_entry ):4字节
程序头部表偏移地址(e_phoff ):4字节
节区头部表偏移地址(e_shoff ):4字节
保存与文件相关的,特定于处理器的标志(e_flags ):4字节
ELF头的大小(e_ehsize ):2字节
每个程序头部表的大小(e_phentsize ):2字节
程序头部表的数量(e_phnum ):2字节
每个节区头部表的大小(e_shentsize):2字节
节区头部表的数量(e_shnum ):2字节
节区字符串表位置(e_shstrndx):2字节
程序头表描述的是程序里面各个段的信息。
这里来举例看一下
比如程序头,第一部分, 这个部分描述程序头的信息,比如类型、大小、偏移等等;这个部分描述的就是程序头的信息。
一个程序中到底有多少节信息,取决于这一部分,节头表。
比较经典的,就是这里的导出函数信息。你问的是so文件可以使用记事本进行编辑修改吗,不可以。
so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。不包含修改编辑。
SO文件格式即ELF文件格式,它是Linux下可执行文件,共享库文件和目标文件的统一格式。根据看待ELF文件的不同方式,ELF文件可以分为链接视图和装载视图。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)