首页 > 其他分享 >地址无关码技术

地址无关码技术

时间:2022-12-23 11:15:47浏览次数:39  
标签:副本 技术 无关 地址 指令 模块 共享 全局变量

可以想象,动态链接模块被装载映射至虚拟空间后,指令部分是在多个进程之间共享的,由于装载时重定位的方法需要修改指令,所以没有办法做到同一份指令被多个进程共享,因为指令被重定位后对于每个进程来讲是不同的。当然,动态连接库中的可修改数据部分对干不同的讲程来说有多个副本,所以它们可以采用装载时重定位的方法来解决。

装载时重定位的一个很大的缺点就是共享对象的指令部分不能被共享,这是不能接受的,有一个简单的解决方案:地址无关码技术

实现的基本想法就是把指令中那些需要被修改的部分分离出来,跟数据部分放在一起,这样指令部分就可以保持不变,而数据部分可以在每个进程中拥有一个副本。

下面是四种模块间的引用方式:

  • 第一种是模块内部的函数调用,跳转等
  • 第二种是模块内部的数据访问,比如模块中定义的全局变量,静态变量
  • 第三种是模块外部的函数调用,跳转等
  • 第四种是模块外部的数据访问,比如其他模块中定义的全局变量

 

 

第三四种情况:很明显,这些其他模块的全局变量的地址是跟装载地址有关的。ELF的做法是在数据段里面建立一个指向这些变量的指针数组,也被称为全局偏移表。

 

 

通过这种方式,以上四种地址引用都实现了地址无关性。

 

共享模块的法全局变量的处理

ELF共享库在编译时,默认都把定义在模块内部的全局变量当作定义在其他模块的全局变量,也就是说当作前面的类型四,通过GOT来实现变量的访问。当共享模块被装载时,如果某个全局变量在可执行文件中拥有副本,那么动态链接器就会把GOT中的相应地址指向该副本,这样该变量在运行时实际上最终就只有一个实例。如果变量在共享模块中被初始化,那么动态链接器还需要将该初始化值复制到程序主模块中的变量副本:如果该全局变量在程序主模块中没有副本,那么GOT中的相应地址就指向模块内部的该变量副本。

标签:副本,技术,无关,地址,指令,模块,共享,全局变量
From: https://www.cnblogs.com/wuyun--wy/p/17000116.html

相关文章

  • Vue 3 技术揭秘
    随着Vue3正式版本的发布,未来Vue3将会成为前端的主流框架,这个毋庸置疑。Vue3在使用方面会兼容部分Vue2.x的特性,比如optionsAPI。所以,究竟是要先学习Vue2打......
  • 以人工智能或无人化、自动化技术影响世界
    背景老师最近分享了一个视频,关于无人超市,无人化管理的超市是如何知道消费者拿了什么,多拿会怎么办?如何进行付款?但是无人化管理都为用户考虑到了这些。无人化管理应用的场景无......
  • C#正则表达式提取HTML中IMG标签的SRC地址
    一般来说一个HTML文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想把文档中的img标签提取出来并不是一件容易的事。由于img标签样式变化多端,使提取的时候......
  • 浅谈地址,section,vstart
    地址:地址只是数字,描述各种符号在源程序中的位置,它是源代码文件中各符号偏移文件开头的距离。由于指令和变量所占内存大小不同,故他们的偏移量参差不齐。由编译器给各符号编......
  • 航天技术导论
    问题1:问题2:波阻,2.2.3......
  • 服务间访问的请求地址,走内网
    记录一次部署遇到过的问题问题描述:在一次现网服务上线中,新增了一个http请求地址的配置项,这个地址是当前服务请求另外一个服务的接口的一个配置请求,反正写的就是一个完全的......
  • 支付宝接入技术
    准备工作:去支付宝开放平台准备好以下东西//沙箱应用私钥(privatekey)privateStringshaxiang_app_private_Key="MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEA......
  • 福布斯中国对话巨杉数据库:技术聚焦、行业聚焦,数据库创新要扎根中国
    巨杉数据库凭借在分布式数据库领域的创新与沉淀,荣登全球最具影响力的财经商业媒体《福布斯》中文版杂志11-12月刊,就国产基础软件的创新与挑战,与福布斯中国进行了一场对话。......
  • 网络流量控制技术简介
    ​网络流量控制技术确保处于同一个云计算数据中心的虚拟机能够获得可靠的网络带宽,是云计算数据中心重要的技术。在实际的运营中,虚拟机实际的控制权属于租户,网络流量控制就是......
  • 基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等
    1、引言在社区中,分享了很多篇基于Netty编写的IM聊天入门文章(比如《跟着源码学IM》系列、《基于Netty,从零开发IM》系列等),在这些文章中分享了各种IM通信算法原理和功能逻辑......