在Linux下,gcc编译出来的可执行文件是elf格式的二进制文件。那么肯定要elf文件进行解析才能正确的得到进程可执行数据的位置。
Linux下的c语言或c++编程涉及底层开发的内容。首先,segment是section的集合,一个segment可以映射到section。ELF文件解析是机器语言。而ARM的可执行文件格式是ELF文件解析格式。
验证自己的readelf是否正确,使用之前讨论过的readelf命令即可。详细的readelf的命令可以通过man readelf命令查看命令手册。
首先我先读了一下别人的源码(卑微)。结合一下自己需要达成的目标功能,大致心得如下:
首先需要完成的功能:
-syms:显示文件的符号表入口。类似于nm -s提供的信息 。objdump给出的输出结果为:
-reloc: 显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。
-section:仅仅显示指定名称为name的section的信息
-section-headers:显示目标文件各个section的头部摘要信息。
-file-headers:显示objfile中每个文件的整体头部摘要信息。
-all-headers:显示所可用的头信息,包括符号表、重定位入口。-x 等价于-a -f -h -r -t 同时指定。
-full-contents:显示指定section的完整内容。默认所有的非空section都会被显示。
-dwarfs:显示文件中包含有DWARF调试信息格式的段.
-g:显示调试信息。企图解析保存在文件中的调试信息并以C语言的语法显示出来。仅仅支持某些类型的调试信息。有些其他的格式被readelf -w支持。
熟悉了一下Linux下命令行参数:
当然我们实际要达到的效果和readelf命令还是有些区别的。