首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建共享对象时,不能使用针对`.text的重定位R_X86_64_32S

创建共享对象时,不能使用针对.text的重定位R_X86_64_32S

在云计算领域中,创建共享对象是指在软件开发过程中,将一些可重复使用的代码、函数或数据封装成一个独立的模块,以便在不同的应用程序中共享和复用。共享对象可以提高代码的可维护性和可重用性,减少开发工作量。

重定位(relocation)是指在程序执行或加载过程中,将程序中使用的符号地址映射到实际的内存地址的过程。在创建共享对象时,重定位是一个重要的步骤,它确保共享对象能够正确地链接和加载到应用程序中。

.text是一个程序段(section),它存储了可执行代码的指令。R_X86_64_32S是一种特定的重定位类型,用于将32位符号地址映射到64位目标地址。

然而,针对.text的重定位R_X86_64_32S在创建共享对象时是不允许的。这是因为在64位系统中,.text段中的指令使用的是64位地址,而R_X86_64_32S只能将32位符号地址映射到64位目标地址,无法正确处理64位地址的重定位。

为了解决这个问题,可以使用针对.text的其他适合64位地址的重定位类型,例如R_X86_64_PC32。这种重定位类型可以将32位相对地址映射到64位目标地址,适用于64位系统中的共享对象创建过程。

腾讯云提供了一系列的云计算产品,包括云服务器、云数据库、云存储等,可以满足不同场景下的需求。具体推荐的产品和产品介绍链接地址可以根据实际需求和情况进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ELF文件及android hook原理

ELF文件主要有四种类型: 可定位文件(Relocatable File) 包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件代码和数据。...比如”.rel.text”就是针对”.text定位表,”.rel.data”就是针对”.data”定位表。...我们还需要有一种更好方法解决共享对象指令中对绝对地址定位问题。...程序开始执行时,动态链接器都要进行一次链接工作,会寻找并装载所需共享对象,然后进行符号查找地址定位等工作,如此一来,程序运行速度必定会减慢。....dynamic段 这个段里保存了动态链接器所需要基本信息,比如依赖哪些共享对象、动态链接符号表位置、动态链接定位位置、共享对象初始化代码地址等。

3.7K81

CSAPP---第七章-链接

---- 目标文件 目标文件有三种形式: 可定位目标文件: 包含二进制代码和数据,编译可以和其他可定位文件合并起来,创建一个可执行目标文件。...当源代码经过编译生成可定位目标文件后,其中无法识别的符号引用,对应call调用或者引用地址会被设置为0,等到链接定位进行地址。修正 代码定位条目放在 .rel.text 中。....text、.rodata 和 .data 节与可定位目标文件中节是相似的,除了这些节已经被定位到它们最终运行时内存地址以外。....这里涉及到CSAPP第九章要讲虚拟内存机制,该章节中会探讨如何实现库共享 静态库和共享库构造对比如下: 动态链接基本思路是当创建可执行文件,静态执行一些链接,然后在程序加载,动态完成链接过程...因此,printf函数地址只能回写到数据段内,而不能回写到代码段上。 注意:刚才谈到回写,是指运行时修改,更专业称谓应该是运行时定位,与之相对应还有链接定位

83710

动态链接相关结构

动态链接定位共享对象需要定位主要原因是导入符号存在。...但是在动态链接中,导入符号地址在运行时才确定,所以需要在运行时将这些导入符号引用修正,即需要定位; 我们在前面地址无关章节中也提到过,动态链接可执行文件使用是PIC方法,但这不能改变它需要定位本质...对于动态链接来说,如果一个共享对象不是以PIC模式编译,那么毫无疑问,它是需要在装载定位:如果一个共享对象是PIC模式编译,那么它还需要再装载进行定位吗?...是的,PIC共享对象也是需要定位; 对于使用PIC技术可执行文件或共享对象来说,虽然它们代码段不需要定位(因为地址无关),但是数据段还包含了绝对地址引用,因为代码段中绝对地址相关部分被分离了出来...动态链接定位相关结构 共享对象定位与我们在前面“静态链接”中分析过目标文件定位十分类似,唯一有区别的是目标文件定位是在静态链接完成,而共享对象定位是在装载完成

1.7K20

地址无关码

这个问题另一种表述就是:共享对象在编译不能假设自己在进程虚拟地址空间中位置。...Linux和GCC支持这种装载定位方法,我们前面在产生共享对象,使用了两个GCC参数“shared”和“-fPIC”,如果只使用“- shared”,那么输出共享对象就是使用装载定位方法...由于可执行文件在运行时并不进行代码定位,所以变量地址必须在链接过程中确定下来。为了能够使得链接过程正常进行,链接器会在创建可执行文件,在它“bss”段创建一个 global变量副本。...当动态 链接器装载共享对象,如果发现该共享对象有这样定位入口,那么动态链接器就会对 该共享对象进行定位。 实际上,我们甚至可以让代码段也使用这种装载定位方法,而不使用地址无关代码。...$gcc -shared pic. c -o pic. so 上面这个命令就会产生一个不使用地址无关代码而使用装载定位共享对象

96720

深度解密Android中基于pltgothook实现原理

4、装载、动态链接与定位 4.1、装载 这个很好理解,我们在使用一个动态库内函数,都要先对其进行加载,在android中,我们通常是使用System.loadLibrary方式加载我们目标共享库...4.3、定位 共享库需要定位主要原因是导入符号存在。...动态链接下,无论是可执行文件或共享对象,一旦它依赖于其他共享对象,也就是说有导入符号(比如fwrite函数),那么它代码或数据中就会有对于导入符号引用。...在编译这些导入符号地址未知,在运行时才确定,所以需要在运行时将这些导入符号引用修正,即需要定位。...5、PLT与GOT 前面的过程装载->动态链接->定位完成之后,目标共享基址已经确定了,当我们调用某个函数(比如fwrite函数),调用函数并不是直接调用原始fwrite函数函数地址,它会先经过

3.4K20

一文领略链接与装载

装载定位 共享对象并非完全能被多个进程复用(参照上面共享对象实现图),一般只有指令部分是进程共享,而数据部分仍然是进程独立。...和目标文件一样,共享对象数据段中若有绝对地址引用,会生成对应定位表,当动态链接器把这个共享对象装载后,会根据定位表将数据段中地址引用修正。这个方法叫做 装载定位 。...对于共享对象指令部分来说,无法使用装载定位来处理 。因为我们说装载实际上是指装载到虚拟空间,那指令部分绝对地址引用就需要根据当前进程虚拟地址进行修正。...如果一个共享对象使用相对寻址访问这个全局符号,发生全局符号介入时就可能需要对这个引用定位了,那么这个共享对象指令部分就不能实现 PIC 了。所以对于全局符号来说,同样采用 GOT 方式来访问。...这些眼熟表名字实际上功能结构和静态链接那些表非常相似。最大区别就是目标文件定位是在静态链接完成,共享对象定位是在装载完成。 值得提出是可执行文件也可以编译为共享对象形式。

89730

《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接

链接器使用汇编器产生定位条目( relocation entry)详细指令,不加甄别地执行这样定位。 目标文件   目标文件有三种形式:   可定位目标文件。...包含二进制代码和数据,其形式可以在编译与其他可定位目标文件合并起来,创建一个可执行目标文件可执行目标文件。包含二进制代码和数据,其形式可以被直接复制到内存并执行。 可执行目标文件。...共享目标文件。一种特殊类型定位目标文件,可以在加载或者运行时被动态地加载进内存并链接。   编译器和汇编器生成可定位目标文件(包括共享目标文件)。链接器生成可执行目标文件。...它们对应于带 static属性C函数和全局变量。这些符号在模块m中任何位置都可见,但是不能被其他模块引用。 如何解析多重定义全局符号   链接器输入是一组可定位目标模块。...在加载,加载器将部分链接可执行文件映射到内存,然后调用动态链接器,它通过加载共享库和定位程序中引用来完成链接任务。

2.6K31

扒一扒ELF文件

ELF文件类型 2.1 可定位目标文件(.o文件) 2.2 可执行目标文件(a.out文件) 2.3 共享对象文件(.so文件) 3. ELF文件作用 4....例如编译好可执行文件a.out。 2.3 共享对象文件(.so文件)   用于和其他共享目标文件或者可定位文件一起生成ELF目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。 3.....rel.txt section   .text定位信息,用于重新修改代码段指令中地址信息。....rel.data section   .data节定位信息,用于对被模块使用或定义全局变量进行定位信息。 .debug section   调试用符号表。...共享库文件是一种特殊定位目标。   2.ELF目标文件格式可以从编译链接角度和程序执行角度两个角度看,前者是可定位目标格式,后者是可执行目标格式。

68820

动态链接步骤与实现

他也可以依赖其他共享对象,其中被依赖共享对象由动态链接器负责链接和装载。可是对于动态链接器来说,它定位工作由谁来完成?它是否可以依赖于其他共享对象?...在编写动态链接器必须保证不使用任何系统库,运行库;对于第二个条件,动态链接器必须在启动时有一段非常精巧代码可以完成这项艰巨工作而同时又不能使用全局和静态变量。...其实我们在前面分析地址无关代码已经提到过,实际上使用PIC模式编译共享对象,对于模块内部函数调用也是采用跟模块外部函数调用一样方式,即使用 GOT/PLT方式,所以在 GOT/PLT没有被定位之前...定位与初始化 当上面的步骤完成之后,链接器开始重新遍历可执行文件和每个共享对象定位表,将它们GOT/PLT每个需要定位位置进行修正。...在前面介绍动态链接定位,我们已经碰到了几种定位类型,每种定位入口地址计算方法我们在这里就不再重复介绍了。

1.3K20

JavaWeb核心篇(2)——Request和Response

是基于ServletRequest接口创建针对Http协议请求对象接口 我们在使用Request对象,也常常使用HttpServletRequest接口 Request获得请求数据 Request...对象创建主要目的就是获得请求数据 我们将根据HTTP请求数据对象三种格式分开介绍获得请求数据方法 请求行: 请求行格式: GET/request-demo/req1?...: 我们在使用Response,也以HttpServletResponse为主 设置响应数据 和获取数据相同,我们把函数根据响应数据三部分分别展示: 响应行: 响应行格式: HTTP/1.1 200...首先我们介绍一下定位定位:一种资源跳转方式 客户端向服务器A发出请求,当该资源A无法满足客户端发出请求,资源A返回响应(响应码302表示无法处理,并给出响应头location:xxx告诉客户端应该去哪个资源...("资源B路径") 定位特点: 浏览器地址栏路径发生变化 可以定位到任意位置资源(服务器内部,外部均可以) 两次请求,不能在多个资源使用request共享数据 下面给出代码示例: package

37110

深入理解编译、链接和运行(obj文件组成格式分析,可执行文件组成格式分析)

(3)共享库 如果程序中用到了库函数,如printf、scanf、puts、gets等。则在共享库中包含了这些函数定义。...//.bss return 0; //.text } //.bss共占24个字节 .data共占12个字节 编译生成可定位二进制文件: 编译 整个编译过程分为预编译...针对编译和链接过程,提出以下需要解决问题: (1)编译过程是怎么样? (2)obj文件组成格式是什么,它为什么不能执行?...2.file main.o 在上边两个图中,可以得出这样一个结论。.obj是一个二进制可定位文件,不能执行,并不是一个executable文件。.../a.out 创建虚拟地址空间到物理内存映射(创建内核地址映射结构体),创建页目录和页表。 (2)加载代码段和数据段。

1.7K30

CVE-2017-12824及利用样本分析

0x02.2静态分析 由于笔者重新找到可以调试使用POC,故直接使用Bitter组织某样作为调试对象。...创建一名为QPONMLKJIH互斥对象,并调用GetLastError检查是否已存在该名称互斥对象(0xB7,ERROR_ALREADY_EXISTS): image.png 为DLL文件申请SizeofImage...接下来对DLL文件进行定位。检查基址定位表大小是否为0: ? 检查IMAGE_BASE_RELOCATION结构大小是否为0: ? 根据定位项数组中定位数据进行定位: ?...依次更改.text、.rdata、rsrc区块所在内存区域保护属性: image.png 调用DLL文件中一函数过程: image.png 其功能为创建一新线程: ?...0x06 参考 •Wikipedia——https://en.wikipedia.org/wiki/InPage•蔓灵花(BITTER)APT组织使用InPage软件漏洞针对巴基斯坦攻击及团伙关联分析

79810

java学习八股之JVM-内存划分-垃圾回收器-回收算法-双亲委派-三色标记

私有线程安全,共享不安全 堆:JVM回收主要区域,存放对象信息,分为新生代和老年代,新生代eden取内存不够发送MinorGC,老年代内存不够发送FullGC 通过new关键字创建对象使用堆内存...它存储每个类结构,例如运行时常量池、字段和方法数据,以及方法和构造函数代码,包括特殊方法,用于类和实例初始化以及接口初始化,方法区域是在虚拟机启动创建。...,清楚边界外垃圾对象,标记清楚和整理由垃圾回收期决定使用哪一种,用在老年代 复制算法:内存一分为二,只使用一块,gc将活着对象移动带另一块,然后清空之前区域,用在新生代eden区和survice...清除会清理标记为不可用对象. roots定位:是对存活对象进行移动,以腾出大块内存空间,减少碎片产生.定位最开始会StopTheWorld,却决于定位集与对象总活动集比例....并发定位与并发标记类似. 流程还是同cms类似 12.

17030

ELF文件格式简介

存储可定位表项,可能会有附加内容,目标文件可能有多个可定位表项; 此种类型节sh_link存储相关符号表节索引,sh_info存储定位使用索引; SHT_HASH(5):存储符号哈希表...:一组目标文件、库、系统共享资源和其他共享库链接在一起创建可执行文件。...因此.text定位部分通常具有名称.rel.text或.rela.text; .relaname,类型SHT_RELA:同relname。...符号表中保存字符串是节名和目标文件中使用符号。而需要使用对应字符串,只需要在需要使用地方指明对应字符在字符串表中索引即可,使用字符串就是索引处到第一个\0之间字符串。...另外,不同对象文件类型符号表条目对 st_value 成员解释略有不同: 在定位文件中在可定位文件中,st_value保存节索引为SHN_COMMON符号对齐约束; 在可定位文件中,st_value

1.9K30

编译器、链接器和解释器

定位(Relocation): 目标文件和库文件通常会包含相对于文件起始位置相对地址,这些地址需要在最终可执行文件中被映射到正确内存地址上。...链接器会遍历目标文件中定位信息(.relo.text、.relo.data),将这些相对地址替换为实际绝对地址。这样,可执行文件就可以正确地在内存中加载和执行。 3....这些库代码和数据存储在系统共享库中(也称为动态链接库或共享对象,如 .so 或 .dll 文件)。多个程序可以共享同一个库实例,减少了存储空间和系统资源浪费。...运行时动态链接:共享库已经在加载加载到了内存中,但链接最终步骤是在程序运行时进行。这时,操作系统会确保程序可以正确地访问所需共享库中函数和变量。...生成可执行文件(Executable File Generation): 在完成所有的符号解析、定位和库依赖解析后,链接器会根据上述步骤结果生成最终可执行文件。

27520

【Linux随笔】Linux动态库管理工具ldconfig和ldd

我们常用来用来查看程序运行所需共享库,用来解决程序因缺少某个库文件而不能运行一些问题。...--version:打印指令版本号; -v:详细信息模式,打印所有相关信息; -u:打印未使用直接依赖; -d:执行定位和报告任何丢失对象; -r:执行数据对象和函数定位,并且报告任何丢失对象和函数...如果使用 ldd 命令没有找到对应共享库文件和其具体位置,可能是两种情况引起: 1、共享库没有安装在该系统中; 2、共享库保存在 /etc/ld.so.conf 文件列出搜索路径之外位置。...ldconfig用途:用途主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列目录下,搜索出可共享动态链接库(格式如lib*.so*),进而创建出动态装入程序...语法: -v或--verbose:用此选项,ldconfig将显示正在扫描目录及搜索到动态链接库,还有它所创建连接名字。

2.2K20

深入理解计算机系统(第三版) CSAPP 杂谈,第7章:链接

链接器主要完成符号解析和定位两个任务。 目标文件有三种形式:可定位目标文件(.so);可执行目标文件(.exe),共享目标文件(.so)。...linux x86-64 定位目标文件使用 ELF 格式。....symtab:符号表,存放定义和引用函数与全局变量信息。使用 STRIP 命令可以去掉符号表。 .rel.text:.text 中位置列表,是定位信息。....rel.data: 引用或定义所有全局变量定位信息。 .debug:调试符号表。用 -g 选项编译时候才会得到这张表。 .line:源程序行号与 .text 机器码对应关系。...遇到目标文件 .o 时会把未定义和已定义符号保存起来,遇到存档文件 .a ,除了前面的操作,还会把 .a 成员符号与未定义符号比较,把匹配成员符号对应 .o 链接起来。

1K30

基于react组件库主题设计方案

设计目标 性能 一个方案落地前提得有性能保障,不重新初始化视图,避免出现闪屏、卡顿等性能缺陷现象,同时也要保障功能稳定,不能存在部分组件不按预期切换主题现象。...另一方面是让业务侧使用组件可以快速定位组件内部结构,方便排查使用过程中遇到问题。...而针对context缺点,我们可以放下这个顾虑,因为主题本身也是只消费一遍,在切换主题时候进行消费,而不是高频使用。因此组件获取样式配置表是通过context方式进行获取。...+其他可配置默认样式值,如字体大小,字等,业务侧可以重写样式,最终生成样式表作为提供者Provider给到各个组件使用。...useTheme是一个合并样式方法,参数是样式对象

7.4K2622
领券