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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IBinder获取手机服务信息异常

小米8 利用IBinder transact获取服务的接口名字,结果出现以下异常: W/System.err: java.lang.SecurityException W/System.err: at android.os.BinderProxy.transactNative(Native Method) W/System.err: at android.os.BinderProxy.transact(B…

初学C遇到的一些知识点汇总

<span style"font-family: arial, courier new, courier, 宋体, monospace; white-space: pre-wrap;">本人是以C#为入门语言&#xff0c;现在开始学习数字图像处理&#xff0c;正在学习c语言&#xff0c;在这方面还是小白&#xff0c;所以打算把遇到的问题进行…

利用OpenCV的Haar特征目标检测方法进行人脸识别的尝试(一)

一、前言 由于还处于学习阶段&#xff0c;大多数内容都是从网上学习借鉴的&#xff0c;重复的内容就不多赘述&#xff0c;只是将自己的经验和想法分享出来。感觉不错的学习资源如下 http://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html http://www.cnblog…

Haar特征原理与icvCreateIntHaarFeatures方法的具体实现附详细注释—— 人脸识别的尝试系列(二)

带着强烈的兴趣&#xff0c;上周开始人脸识别的尝试与学习&#xff0c;并且将具体的操作过程记录了下来 链接如下&#xff1a;http://blog.csdn.net/u011583927/article/details/44627493 这周开始了对于算法的深入学习&#xff0c;下面进入正题。 Haar特征的原理是什么&…

createsamples.cpp中生成vec文件的实现及详细注释、图解——人脸识别的尝试系列(三)

在我们开始训练我们的Haar分类器之前&#xff0c;首先要对样本进行处理。 人脸识别的尝试系列&#xff08;一&#xff09;中&#xff1a;http://blog.csdn.net/u011583927/article/details/44627493 我们已经提到了如何准备我们的样本&#xff0c;在如下图准备好样本之后 需…

设置同时上内外网+文件共享

最近做了这样一个小项目&#xff0c;逻辑是这样的。 需要在某个办公人员的电脑上装个软件&#xff0c;从局域网中的另一台电脑中读取access数据库&#xff0c;然后用apn接入某个系统的内网传输数据。 同时还要保证这个工作人员能够正常的浏览因特网。 这就涉及到了两个内容。…

浅析haartraining方法进行人脸检测

上个月用了两周的时间&#xff0c;学习了用于人脸检测的haartraining算法&#xff0c;今天打算做一总结 首先先为和我一样的初学者推荐几篇博客 http://blog.csdn.net/zouxy09/article/details/7922923真的很感谢写这篇文章的博主&#xff0c;讲解深入浅出。本文中的主要逻辑…

haartraining训练分类器方法cvCreateTreeCascadeClassifier()详解——人脸识别的尝试系列(四)

本文将介绍opencv_haartraining.exe中训练分类器的核心方法cvCreateTreeCascadeClassifier&#xff08;&#xff09;中参数的具体含义&#xff0c;以及具体实现代码附加详细的注释。最后给出运行截图以作代码阅读的参考 我们还是从具体的例子出发&#xff0c;以一些实际的参数帮…

常用知识总结——模板Template

1. 模板的概念。 我们已经学过重载(Overloading)&#xff0c;对重载函数而言,C的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如&#xff0c;为求两个数的最大值&#xff0c;我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。 /…

opencv视频读写和视频等间隔采样

今天学习了opencv的HighGUI的内容 总结了两个视频读写demo以备以后进行视频处理和识别用 demo1 视频的读取和写入 按顺序读取视频的每一帧。对于读取的每一帧图像&#xff0c;显示在窗口中&#xff0c;然后转化为灰度图像输出到指定的文件中。 运行期间可以按ESC键退出。 还…

Socket通用TCP通信协议设计及实现(防止粘包,可移植,可靠)

Socket通用TCP通信协议设计及实现&#xff08;防止粘包&#xff0c;可移植&#xff0c;可靠&#xff09; 引文 我们接收Socket字节流数据一般都会定义一个数据包协议。我们每次开发一个软件的通信模块时&#xff0c;尽管具体的数据内容是不尽相同的&#xff0c;但是大体上的框…

浅谈 Adaboost 算法

注&#xff1a;本文全文引用自http://blog.csdn.net/carson2005/article/details/41444289 当然作者也是转载的&#xff0c;原文是http://blog.csdn.net/haidao2009/article/details/7514787 写的很好所以转载过来以便之后再次翻阅。 一 Boosting 算法的起源 boost 算法系列的起…

如何理解离散傅里叶变换(一)实数形式傅里叶变换

如何理解离散傅里叶变换&#xff08;一&#xff09; ——实数形式傅里叶变换 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 本文…

快速傅里叶变换(FFT)

快速傅里叶变换&#xff08;FFT&#xff09; ------------------------------------------------------------------------------------------------------------------- 作者&#xff1a;随煜而安 时间&#xff1a;2015/7/21 注&#xff1a;本文为作者原创文章&#xff0c…

风机桨叶故障诊断(一) 样本的获取

风机桨叶故障诊断&#xff08;一&#xff09; 样本的获取今天团队接了个新项目&#xff0c;做一个风机桨叶故障诊断系统。虽然马上就是准备考研的关键期了&#xff0c;可是一想到这是我学习了机器学习后遇到的第一个实际项目&#xff0c;我觉得参与进来&#xff0c;也帮导师分担…