0x01 引言

ELF文件格式,主要基于两种,一种是基于链接视图,链接视图即是基于节(Section)来进行解析,一种是基于执行视图,执行视图即是基于段(Segment)来进行解析。前一种是用于静态分析的时候,譬如IDA载入。后一种是在动态链接执行的时候,譬如linker载入。

所以修改节信息实际上是不影响ELF正常执行的,而且hook功能也只能在执行视图中进行符号解析。

所以修改节信息实际上是不影响ELF正常执行的,而且hook功能也只能在执行视图中进行符号解析。

所以修改节信息实际上是不影响ELF正常执行的,而且hook功能也只能在执行视图中进行符号解析。

0x02 re.dyn 和 rel.plt的区别

基于执行视图通过PT_DYNAMIC获取重定位段,然后在重定位段中可获得主要两种类型的重定位表:DT_REL(A),DT_JUMPREL,分别对应rel.dyn和rel.plt。在这两种表里面,可通过ELF_R_TYPE_T获取重定位类型,重定位类型按功能性分函数类型和变量类型,后面会详述。那rel.dyn和rel.plt分别存放的重定位类型是有所不同,R_ARM_RELATIVE、R_ARM_ABS32和R_ARM_GLOB_DAT存放在rel.dyn上,R_ARM_JUMP_SLOT存放在rel.plt上。

0x03 重定位类型详解

常见的重定位函数类型有三种:R_ARM_JUMP_SLOT,R_ARM_ABS32和R_ARM_GLOB_DAT。

对于64位或者其他平台的有:

#if defined(__arm__)
#define JUMP_SLOT_T         R_ARM_JUMP_SLOT         //.rel.plt
#define GLOB_DAT_T          R_ARM_GLOB_DAT              //.rel.dyn
#define ABS_T               R_ARM_ABS32                 //.rel.dyn
#elif defined(__aarch64__)
#define JUMP_SLOT_T         R_AARCH64_JUMP_SLOT
#define GLOB_DAT_T          R_AARCH64_GLOB_DAT
#define ABS_T               R_AARCH64_ABS64
#elif defined(__i386__)
#define JUMP_SLOT_T         R_386_JMP_SLOT
#define GLOB_DAT_T          R_386_GLOB_DAT
#define ABS_T               R_386_32
#elif defined(__x86_64__)
#define JUMP_SLOT_T         R_X86_64_JUMP_SLOT
#define GLOB_DAT_T          R_X86_64_GLOB_DAT
#define ABS_T               R_X86_64_64
#endif

那每种对应什么类型呢

参考

https://bbs.pediy.com/thread-222731.htm

https://bbs.pediy.com/thread-193720.htm

http://www.cs.cmu.edu/afs/cs/academic/class/15213-s00/doc/elf.pdf

Android的ELF文件重定位详解,包括64位相关推荐

  1. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  2. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  3. Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  4. Android init.rc文件解析过程详解(一)

        Android init.rc文件解析过程详解(一) 一.init.rc文件结构介绍 init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字 ...

  5. Android之手机文件夹目录详解

    android系统的手机文件夹目录详解 一.文件夹 1./acct/    系统回收站,删除的系统文件. 2./cache/    缓存 3./data/    用户的所有程序相关数据 app/    ...

  6. 24. PE结构-PE详解之基址重定位详解

    问题一:什么是基址重定位? 答:重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你霸占,你必须转移到别的地址,这就需要基址重定位.打个比方:例如你现在计划在某某地方建 ...

  7. Android AndroidManifest 清单文件以及权限详解

    原文转自 http://my.oschina.net/yuanxulong/blog/366753 感谢作者 搬到自己博客方便查看. 每个Android应用都需要一个名为AndroidManifest ...

  8. 联发科mt6735详细参数_MT6735详解:64位全网通 GPU太坑

    今天,联发科正式发布了旗下的首款64位全网通芯片MT6735,现在我们来看看它的详细规格,这次你可能要失望了. CPU部分,其采用四核心64位Cortex-A53架构设计,主频1.3-1.5GHz,这 ...

  9. Android开发实现高德地图定位详解

     一. 要实现高德地图定位呢,首先需要做好以下几步准备: 1. 在高德开放平台注册帐号 注册地址:http://lbs.amap.com 2. 在开发中下载Android平台下的地图SDK和定位S ...

最新文章

  1. DIY 一套正版、免费、强大的 Visual Studio 2012 IDE
  2. 半导体行业必将再火十年!两大趋势成发展新动能
  3. 自旋锁spinlock解析
  4. HttpResponseCache的使用缓存cache
  5. 我仅仅想安安静静的做一个编程的美男子
  6. c#中WepAPI(post/get)控制器方法创建和httpclient调用webAPI实例
  7. iOS runtime实战应用:关联对象
  8. MTCNN-tensorflow源码解析-gen_landmark_aug_12.py;gen_imglist_pnet.py
  9. 洛谷P2709 小B的询问
  10. KNN(五)--层次Kmean
  11. 一个完整的数据分析、挖掘流程详细介绍
  12. 决策树人工智能预测模型_部署和服务AI模型进行预测的10种方法
  13. 月入5000,你有什么资格谈生活
  14. java完全自学手册下载,已拿offer
  15. armeabi与armeabi-v7a的区别,绝对干货!
  16. android 创建线程的三种方式
  17. H3CNE实验(一)静态路由
  18. [原创] 婚纱照PS处理技术精粹(视频教程1.2G免费下载,11个核心技术点)
  19. Edge浏览器固定到任务栏的网页图标显示透明
  20. 偷学Python第十三天:字典的基本操作

热门文章

  1. Tomcat性能优化总结
  2. .net core中不支持GB2312编码的问题
  3. tomcat server.xml配置详解
  4. php中的html元素
  5. PowerDesiGner数据库设计
  6. Oracle中临时表的深入研究
  7. vs code 配置java
  8. Leetcode--164. 最大间距
  9. Java打印三角形(双层for循环)
  10. 学云计算能干什么_陌陌主播等级计算?陌陌主播升级明细表?