Android的ELF文件重定位详解,包括64位
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位相关推荐
- 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- Android init.rc文件解析过程详解(三)
Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...
- Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- Android init.rc文件解析过程详解(一)
Android init.rc文件解析过程详解(一) 一.init.rc文件结构介绍 init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字 ...
- Android之手机文件夹目录详解
android系统的手机文件夹目录详解 一.文件夹 1./acct/ 系统回收站,删除的系统文件. 2./cache/ 缓存 3./data/ 用户的所有程序相关数据 app/ ...
- 24. PE结构-PE详解之基址重定位详解
问题一:什么是基址重定位? 答:重定位就是你本来这个程序理论上要占据这个地址,但是由于某种原因,这个地址现在不能让你霸占,你必须转移到别的地址,这就需要基址重定位.打个比方:例如你现在计划在某某地方建 ...
- Android AndroidManifest 清单文件以及权限详解
原文转自 http://my.oschina.net/yuanxulong/blog/366753 感谢作者 搬到自己博客方便查看. 每个Android应用都需要一个名为AndroidManifest ...
- 联发科mt6735详细参数_MT6735详解:64位全网通 GPU太坑
今天,联发科正式发布了旗下的首款64位全网通芯片MT6735,现在我们来看看它的详细规格,这次你可能要失望了. CPU部分,其采用四核心64位Cortex-A53架构设计,主频1.3-1.5GHz,这 ...
- Android开发实现高德地图定位详解
一. 要实现高德地图定位呢,首先需要做好以下几步准备: 1. 在高德开放平台注册帐号 注册地址:http://lbs.amap.com 2. 在开发中下载Android平台下的地图SDK和定位S ...
最新文章
- DIY 一套正版、免费、强大的 Visual Studio 2012 IDE
- 半导体行业必将再火十年!两大趋势成发展新动能
- 自旋锁spinlock解析
- HttpResponseCache的使用缓存cache
- 我仅仅想安安静静的做一个编程的美男子
- c#中WepAPI(post/get)控制器方法创建和httpclient调用webAPI实例
- iOS runtime实战应用:关联对象
- MTCNN-tensorflow源码解析-gen_landmark_aug_12.py;gen_imglist_pnet.py
- 洛谷P2709 小B的询问
- KNN(五)--层次Kmean
- 一个完整的数据分析、挖掘流程详细介绍
- 决策树人工智能预测模型_部署和服务AI模型进行预测的10种方法
- 月入5000,你有什么资格谈生活
- java完全自学手册下载,已拿offer
- armeabi与armeabi-v7a的区别,绝对干货!
- android 创建线程的三种方式
- H3CNE实验(一)静态路由
- [原创] 婚纱照PS处理技术精粹(视频教程1.2G免费下载,11个核心技术点)
- Edge浏览器固定到任务栏的网页图标显示透明
- 偷学Python第十三天:字典的基本操作