上篇介绍了一些基础知识,中篇详细讲一下其他的几个重定位项的格式。不全,但这些是我遇到的,对准确性负责。
一、前情提要
上篇讲了 printf 函数的重定位和 "HelloWorld" 的重定位,本篇详细讲一下遇到的情况。介绍一个背景,每个重定位项,都是由自身的属性 和对应的 symbol 项构成的,而symbol项又有自己的属性,所以需要多写一点脚本,将每个条目的详细信息都打一下。 用简单树状图表示一下它们之间的关系
1 2 3 4 5 6 7
| relocation |-> r_info_offset 表示从节开始起,偏移位置需要进行重定位 |-> r_info_type 表示重定位类型 (遇到三种 R_ARM_REL32 R_ARM_CALL R_ARM_GOT_PREL) |-> r_info_sym 表示重定位的符号 \-> s_info.bind 表示该符号局部还是全局(遇到两种 STB_GLOBAL,STB_LOCAL) \-> s_info.type 表示该符号本身类型(遇到三种 STT_OBJECT STT_NOTYPE STT_FUNC) \-> s_info.st_value 表示该符号的值,当STT_NOTYPE时为0
|