你的位置:首页 > 操作系统

[操作系统]ELF Format 笔记(八)—— 符号的类型和属性(st_info)

我是天空里的一片云,偶尔投影在你的波心,你不必讶异,更无须欢喜,在转瞬间消灭了踪影。你我相逢在黑夜的海上,你有你的,我有我的,方向;你记得也好,最好你忘掉,在这交会时互放的光亮! —— 徐志摩·偶然

ilocker:关注 Android 安全(新入行,0基础) 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 符号的前面。

海南旅游必去的地方是海南旅游必去景点排名海南旅游地图线路大全海南旅游多少钱海南旅游攻略大全都峤山游玩需要多长时间?容县都峤山有吃饭的地方吗? 森波拉奇妙世界五一有什么好玩的?佛冈森波拉五一活动介绍? 日本旅游的最佳时间是什么时候? 容县都峤山几点开放?都峤山风景区营业时间? 3月深圳有什么好玩地方?2015深圳欢乐谷好玩活动介绍? 2015放鸡岛三八妇女节女士免费吗?茂名放鸡岛3.8女士门票优惠价格? 寻找醉美“花花世界”2015徐州赏花地图出炉 2015茂名浪漫海岸三八妇女节女士免费吗?电白茂名浪漫海岸3.8女士优惠价格? 层林尽染叶如血 无锡最佳赏枫地 马尔代夫最值得一游的岛屿有哪些? 九寨沟旅游要多少钱呢? 三亚最火海湾对比 总有一款适合你 马尔代夫的淡旺季是什么时候? 马尔代夫去哪购物好?哪里可以购物? 马尔代夫白金岛怎么样?白金岛好玩吗? 去马尔代夫需要办签证吗? IDT5V2310NRI Datasheet IDT5V2310NRI Datasheet IDT71V3558S133PF Datasheet IDT71V3558S133PF Datasheet IDT72V3632L15PQF Datasheet IDT72V3632L15PQF Datasheet 浙江到港澳四天游 浙江到港澳四天游 浙江到港澳四天游 包头到港澳5天游 包头到港澳5天游 包头到港澳5天游 大庆跟团香港两天一晚游 大庆跟团香港两天一晚游 大庆跟团香港两天一晚游