ELF|ELF Format 笔记(八)—— 符号的类型和属性(st_info)
我是天空里的一片云,偶尔投影在你的波心,你不必讶异,更无须欢喜,在转瞬间消灭了踪影。你我相逢在黑夜的海上,你有你的,我有我的,方向;你记得也好,最好你忘掉,在这交会时互放的光亮! —— 徐志摩·偶然
ilocker:关注 Android 安全(新手) QQ: 2597294287
上篇笔记中说过,Elf32_Sym 结构的 st_info 成员包含了符号的类型和绑定属性等信息。
在 android linker 做重定位时,如果遇到未定义的符号,会判断该符号是否是一个弱引用符号,如果不是,则出错返回。具体是通过 ELF32_ST_BIND 宏来判断的:
文章图片
ELF32_ST_BIND 宏就是从 st_info 中提取一些 bits 作为绑定属性:
文章图片
文章图片
符号绑定属性的宏定义:
文章图片
- STB_LOCAL:本地符号,在本文件外不可见。
- STB_GLOBAL:全局符号,在所有要链接在一起的 object files 中都可见(全局符号可以被其他文件引用)。
- STB_WEAK:弱符号,类似于全局符号,但(定义的)优先级低于全局符号。
在符号表中,通常是本地符号排在前面,全局和弱符号排在后面。
还有一个宏 ELF32_ST_TYPE,用于判断符号的类型,同样也是从 st_info 中提取一些 bits 作为类型信息:
文章图片
文章图片
在 android linker 的源码中,并没有用到该宏,也没有用到符号的类型信息。
符号类型信息的宏定义:
文章图片
- STT_NOTYPE:符号类型未指定。
- STT_OBJECT:数据对象,比如变量、数组等。
- STT_FUNC:函数或其它可执行代码。
- STT_SECTION:表示一个 section,主要用于重定位,通常具有 STB_LOCAL 属性。
- STT_FILE:文件符号,具有 STB_LOCAL 属性,st_shndx 的值为 SHN_ABS。在 ELF 文件的符号表中位于其他 STB_LOCAL 符号的前面。
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- Android中的AES加密-下
- 【读书笔记】贝叶斯原理
- 【韩语学习】(韩语随堂笔记整理)
- 人性的弱点-笔记
- 读书笔记:博登海默法理学|读书笔记:博登海默法理学 —— 正义的探索(1)
- D034+3组苏曼+《写作这回事》读书笔记
- 《自我的追寻》读书笔记3
- 最有效的时间管理工具(赢效率手册和总结笔记)
- 机器学习|机器学习 Andrew Ng《Machine Learning》课程笔记1