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

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 符号的前面。

最新文章

  1. LruCache缓存
  2. ThinkPHP3.2.3使用cli命令行模式
  3. 关于搭建一个高性能网站的服务器的架设思路以及nginx测试的并发
  4. Redis_DataType
  5. 多版本python共存
  6. 动画 CABasicAnimation animationWithKeyPath 一些规定的值
  7. 如何在ASP.NET中用C#将XML转换成JSON
  8. Smart Client Software Factory安装
  9. 深入JS系列学习4
  10. 策略模式 - OK
  11. RAC之RMAN恢复
  12. php 学习笔记 一
  13. php中的echo,json_decode,json_encode常用函数使用注意事项
  14. Markdown对应Yelee主题语法
  15. shell脚本--echo和printf打印输出
  16. 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
  17. python面试题之如何用Python输出一个斐波那契数列
  18. shell脚本监控网站状态
  19. 浏览器访问svn
  20. linux Centos 服务器之间NFS文件共享挂载

热门文章

  1. GitHub for windows 使用方法
  2. Harp – 内置常用预处理器的静态 Web 服务器
  3. 12款免费的响应式 WordPress 主题下载
  4. SharePoint 2013 表单认证使用ASP.Net配置工具添加用户
  5. SharePoint 2013 为用户组自定义EventReceiver
  6. 基于 VLC 的 Android 多媒体解决方案
  7. assign,copy,strong,weak,nonatomic的理解
  8. filezilla sftp 文件和linux 文件不同步的问题
  9. sqlite与多线程
  10. iOS Apple Pay