动态链接知识点

TTL电路搭建半加器实验:操作指南完整版 通过TTL电路搭建半加器,详解逻辑设计与实验步骤,帮助掌握数字电路中的半加器工作原理与实际应用,适合电子技术初学者动手实践。 阅读详情

1.基本思想:

动态链接的基本思想是:将链接的过程推迟到运行时再执行。


2.动态链接文件的格式:

在LINUX 中,ELF的动态链接文件被称为动态共享对象(DSO,dynamic shared object),以.so为扩展名的文件

在WINDOWS中,EP的动态链接文件被称为动态链接库(DLL,dynamic link library),以 .dll 为扩展名的文件


3.静态链接器与动态链接文件

在链接的过程中,也需要将动态链接文件作为链接器的输入文件之一,链接器在解析符号时就可以知道哪些符号是定义在动态链接文件中的动态符号,这样链接器就可以对动态符号的引用做特殊处理,使它称为一个特殊的引用。


4.动态链接程序运行时地址空间分布

在动态链接程序运行时,除了可执行文件本身,将还有动态链接文件与动态链接器将被映射到进程的地址空间中,动态链接器被当做普通的共享对象来进行映射,在系统运行可执行文件之前,会将控制权交给动态链接器,由它完成所有的动态链接工作以后再把控制权交给可执行文件。


5.共享对象的装载地址

共享对象的最终装载地址在编译时是不确定的,而是在装载时,装载器根据当前地址空间的空闲情况,动态的分配一块足够大小的虚拟地址空间给相应的共享对象。


6.共享对象的装载地址的确定方法:

6.1固定共享对象装载地址

概述:由程序员手动指定或者由操作系统给共享对象分配固定的装载地址

缺陷:

a) 地址冲突:假设A程序员开发模块a时,将其的地址固定在0x1000到0x2000,B程序员开发模块b时,也将其地址固定在了相同的位置,则现在程序员C开发的程序需要同时用到 a 与 c 模块,那就无法解决这个问题了。

b) 静态共享库的升级:

SSL(static shared library):静态共享库将程序的各种模块统一交个操作系统来管理,操作系统在某个特定的地址划分出一些地址块,为已知的模块预留足够的空间。

缺陷:升级后的共享库中的全局变量和变量地址必须不变,否则应用程序在链接时已经绑定了该地址,修改后必须重新连接程序;且分配的空间有限


6.2 装载时重定位(LTR,load time relocation)

 概述:在链接时,对所有绝对地址的引用不做重定位,把这一步推迟到装载的时候进行;一旦模块装载地址确定,即目标地址确定,则系统对程序中所有的绝对地址的引用进行重定位。

*注:这种方式的重定位时,共享对象的整个程序是按照一个整体进行加载的,因此,程序中的指令与数据的相对位置是不会改变的。对于程序中的某些指令,将经过重定位后修改指令中的绝对地址。

eg:

如果一个程序在编译时,假设目标地址为0x1000,但在装载的时候操作系统发现0x1000已经被占用,且从0x4000开始有一块足够大的空间可以容纳该程序,则就将该程序装载到0x4000,则程序中指令和数据中的所有绝对引用都只要再加上0x3000的偏移量就可以了

缺陷:

装载时重定位的方法需要修改指令,而动态链接模块被装载至虚拟空间后,指令部分是在多个进程之前共享的,所以装载时重定位的方法无法共享对象。

*个人还暂时没有想明白,为什么需要修改指令,既然程序是作为一个整体加载的,为什么不使用相对地址,而且,重定位的时候为什么会需要修改指令,优快云中有人回答说是:因为可能会出现对模块内全局对象的引用,而模块内全局对象就必须是一个在重定位时修改的量。。。好困惑啊啊啊啊啊啊!!!!!!!!!

微型纵向加密在新能源场站中的实战部署与运维避坑指南 本文详细解析了微型纵向加密在新能源场站中的实战部署与运维技巧。通过国密算法SM4实现数据加密,确保新能源场站通信安全,同时提供非侵入式部署方案和运维避坑指南,帮助提升网络稳定性和运维效率。 阅读详情

相关推荐

Light Tools 8.4 在 win10系统上的安装方法(64位)

** 总的来说安装LT需要以下步骤(折腾了三天终于装好): 安装LT软件–禁用签名–加载含数字签名的第三方inf–添加注册表/安装驱动/添加密钥–成功破解 一、下载对应的LightTools 8.4版本软件,如下图为解压后的文件: 并选择 进行默认安装。 二、禁用数字签名。这里我用了两种方法,一种不行就换另一种,最终成功禁用。 方法1: 1、输入“cmd”并以管理员身份运行; 2、输入或复制 bcdedit.exe /set nointegritychecks on (此命令若没成功,再试bcded

weixin_45560953的博客 1万+

里程碑 ---动态链接 多个知识点 汇总到一处了

里程碑 ---动态链接 多个知识点 汇总到一处了。。。。---关键一个图。。。详参考onenote http://www.codeproject.com/KB/library/elf-redirect.aspx 这个图说明:说明了不仅仅是 加载 ,还有管理方法的不一样,一个是 段彪,一个是头部。。。。。 转载于:https://www.cnblogs.com/titer1/archiv...

weixin_30515513的博客 96

生物信息学名词解释 | K-mer (长度为k的短序列)

K-mer 何谓K-mer 所谓Kmer,即为一段长度为k的DNA片段,是由测序reads剪切一部分得到的。k为一个奇数,k=几,就为几mer。 比如:我的测序reads长度为100bp,我将这100bp打断成17bp的短片段,打断后的17bp段片段就叫17mer,可以获得(100-17+1)条k-mer序列。 Table1 k-mers for GTAGAGCTGT. k k-mers 1 G,T,A,G,A,G,C,T,G,T 3 GTA,TAG,AGA,GAG,AGC,GCT,CT

qq_50637636的博客 2万+

计算机财务管理第五版第四章课后答案,计算机财务管理习题精简版

计算机财务管理习题第一、二章 EXCEL的基本理论一、单选题1.下列符号中不属于比较运算符的是( )A <= B >= C <> D ><2.EXCEL存储单位是工作本,作为一个文件,其扩展名为 ( )A XLS B DBT C ...

weixin_30784365的博客 3218

避坑指南:RK3576+Android14适配移远5G模组(RG200U)时,我遇到的3个‘巨坑’及解决方案

本文详细记录了RK3576芯片适配Android14系统与移远RG200U 5G模组过程中遇到的三大技术难题:RIL服务启动失败、HIDL兼容性矩阵配置错误及ttyUSB权限冲突。通过实战案例提供了动态库拷贝、HIDL版本链声明和SELinux策略调整等解决方案,帮助开发者高效完成5G模组集成,特别适用于基于kernel6.1的嵌入式开发场景。

weixin_30664051的博客 390

影刀RPA进阶:Excel多条件筛选与数据提取实战

本文详细介绍了如何利用影刀RPA实现Excel多条件筛选与数据提取的自动化。通过拆解文本、数值、日期及颜色筛选等核心指令,并结合实战案例,指导用户构建稳健的销售数据提取机器人,从而高效处理复杂数据报表,提升工作效率。

onion的博客 530

动态链接原理

动态链接 动态链接、方法返回地址、附加信息 : 有些地方被称为帧数据区 每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。比如:invokedynamic指令 在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(symbolic Reference)保存在class文件的常量池里。 比如:描述一个方法调用了另外的其他方法时,就是通过常量池中指向方法的符号引用来表示的,那么动

qq_49644209的博客 587

ESP32S3开发实战:从Vscode+IDF环境配置到OpenOCD单步调试全流程

本文详细介绍了ESP32S3开发环境的完整搭建流程,重点讲解如何在Vscode中配置ESP-IDF开发框架,并利用OpenOCD工具实现硬件单步调试。内容涵盖从环境准备、工程创建、代码烧录到高级调试技巧的全方位实战指南,旨在帮助开发者快速掌握ESP32S3的高效开发与调试方法。

weixin_29168813的博客 208

ELF格式分析动态链接原理

objdump -r elf(readelf -r也可以)可以读取rel.dyn变量重定位段,获取需要重定位的变量的相关信息,其中offset字段就是该变量的重定位地址对应的.got(GOT)的表项,比如global_module的offset = 1fdc(正如上面汇编计算的结果),对应的是.got(GOT)表中global_module的表项地址。跳转到.plt section首地址处执行代码,该处代码会会跳转到GOT表项的第三项,存储的是链接器的符号解析函数(装载时才能确定该地址,初始化时为0)...

GetnextWindow的专栏 1167

Java 开发打飞机小游戏(附完整源码)

上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习。java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐。代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习。 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy {

一只独孤的程序猿 1万+

华为的LTC(Lead to Cash,从线索到现金)流程是其销售管理体系的核心,覆盖了从发现销售线索到最终收回现金的全过程,强调端到端的业务贯通和以客户为中心的运营理念

华为LTC流程是覆盖销售全周期的管理体系,包含四大阶段:线索转机会(LTO)、机会转订单(OTO)、订单转交付(OTD)、交付转现金(DTC)。其核心采用"铁三角"团队模式(AR/SR/FR协作),通过多部门联合评审把控关键节点,实现端到端业务贯通。该流程与IPD、MTL、ITR等体系高效协同,结合iSales平台实现数字化管理,有效提升销售效率、客户满意度和资金回笼速度。

金牌架构师 1721

运行时数据区-虚拟机栈-动态链接(Dynamic Linking)

动态链接(Dynamic Linking)(指向运行时常量池的方法的引用) 每一个栈帧内部都包含一个指向运行时常量池中该帧所属方法的引用。包含这个引用的目的是为了支持当前方法的代码能实现动态链接(Dynamic Linking)。 在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(Symbolic Reference)保存在class文件的常量池里。比如:描述一个方法调用另外一个方法时,是通过常量池中指向方法的符号引用来表示的,那么动态链接的作用就是为了将这些符号引用转换为调用

大后生大大大的博客 601

CDDT CST CDDT CSTTT

This is the second part of the SA8653 automotive CDDT configuration guide. It describes the matching rules and modification methods between CDDT and device‑tree DDTS. It explains CDT’s underlying logic and configuration in TZ, QNX and Android. It details C

qq_39257814的博客 1410

动态链接库知识点归纳之一(DLL概念,如何建立,如何使用,如何优化,如何查看)

动态链接库知识点归纳之一(DLL概念,如何建立,如何使用,如何优化,如何查看

追尋ゝ 1551

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC++动态链接库(DLL)编程(关键知识点)

http://blog.youkuaiyun.com/todototry/article/details/1640150

lqjingfeng的专栏 661

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

(补充)linux下编写动态链接库步骤与知识点详解

在linux下编写动态链接库的步骤 类似Windows系统中的动态链接库,Linux中也有相应的共享库用以支持代码的复用。Windows中为*.dll,而Linux中为*.so,我来详细的告诉你如何在linux下编写动态库,以及如何使用它. 在linux下编写动态链接库的步骤:   1.      编写库的头文件和源文件. 2.      把所有涉及到的源文件用如

Fire_For_Code 882

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Android内存优化】基础知识点:程序运行时加载并调用动态链接库中的函数

对于native层内存泄漏的监控,我们需要调用虚拟机的一些函数去获取对应的堆栈数据。总所周知,Java虚拟机,或者Android的ART、Davik虚拟机也都是用C/C++写的,这就需要我们调用通过Linux提供的一些接口去调用虚拟机的动态库,去执行对应的功能,在程序运行时加载并调用动态链接库中的函数。所以掌握动态链接这个知识点就显得很有必要。

Shujie 1327

视频教程-C++动态链接库视频教程(Windows动态链接库)-C/C++

C++动态链接库视频教程(Windows动态链接库) 黄强老师,国家软件设计...

weixin_30340769的博客 350

C++57个入门知识点_番外4_静态链接与动态链接中LIB和DLL的区别与使用

动态链接中的LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。静态链接中的LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。

分享学习成长历程,Winter is coming! 299

c语言添加lib库文件的语句,C/C++知识点之C++ 添加动态链接库及静态链接库的方法总结...

本文主要向大家介绍了C/C++知识点之C++ 添加动态链接库及静态链接库的方法总结,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。一、添加动态链接库情况1:当前解决方案中的动态链接库方法:“添加引用”对话框列出了可以引用的库。“项目”选项卡列出了当前解决方案中的所有项目以及它们包含的所有库。在“项目”选项卡上,选中动态链接库,然后选择“确定”按钮。情况2:外部动态链接库方法...

weixin_35457696的博客 2306

DLL教程 - 如何编写动态链接库

一、 概述 DLL(Dynamic Linkable Library)它提供一些可以直接使用的变量,类和函数。在经历了“无库—静态链接库—动态链接库”的历程后,dll使用十分广泛。本文主要介绍dll,顺便介绍静态库(.lib)的一些知识。 1、静态链接库和动态链接库的异同点 静态链接库和动态链接库都是共享代码,如果采用静态链重点内容接库(.lib),lib中的指令最终都会编译到最终的...

Fisher 2万+

vc2015 C语言程序生成 dll文件,C/C++知识点之使用VS2015创建和使用动态链接库-图文详解...

本文主要向大家介绍了 C/C++知识点之使用VS2015创建和使用动态链接库-图文详解,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。之前看过原创一篇《VS2010动态库开发——第一章演练:创建和使用动态链接库(C++)》的帖子,地址是http://blog.sina.com.cn/s/blog_6fb3686501011ymn.html,感谢原创。这里我们使用VS201...

weixin_42305041的博客 479

Native相关知识点备忘

Native学习规划以及知识点备忘Native学习1 获取栈帧地址和方法返回值2 dladdr()3 ART会阻止在处理native信号期间通过JNI回调Java代码4 ELF中存在.init段和.finit段5 编译和链接过程控制6 ELF可以分为链接视图和执行视图7 查看进程的虚拟地址空间的分布8 为什么so文件也要参与静态链接N 工具汇总 Native学习 最近想抽点时间学些一下native相关的知识,这篇文章只要记录一下学习的知识点,以免遗忘。包括但不限于: C/C++语法 ELF文件格式 编译和

昨夜星辰的博客 739

DLL动态链接库的工作原理

"动态链接"这几字指明了DLLs是如何工作的。 对于常规的函数库,链接器从中拷贝它需要的所有库函数,并把确切的函数地址传送给调用这些函数的程序。 而对于DLLs,函数储存在一个独立的动态链接库文件中。在创建Windows程序时,链接过程并不把DLLs文件链接到程序上。直到程  序运行并调用一个DLLs中的函数时,该程序才要求这个函数的地址。此时Windows才在DLLs中寻找被调

Wanda && Aidem 905

易语言获取链接的真实地址_PWN入门(其四)动态链接库取函数真实地址

首先需要明白的是在程序执行时会动态的加载libc(动态链接库)文件,该动态链接库本质上就是一堆排列好的函数表,当我们需要调用诸如read,scanf等系统函数时就会从这函数表中取相应的函数地址,实现动态调用。补充一下知识盲点:关于libc我们需要知道的是同一个版本的libc文件不管程序如何加载libc中的诸多函数的相对偏移是固定的。但程序在加载libc的过程中libc的基地址会产生一定的...

weixin_39969340的博客 1003

VC++动态链接库编程之非MFC DLL

VC++动态链接库编程之非MFC DLL<br />4.1一个简单的DLL <br /><br />  第2节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数。<br />   如图6,在VC++中new一个Win32 Dynamic-Link Library工程dllTest(单击此处下载本工程)。注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建立的将是第5、6节要讲述的MFC 动态链接库。<br

厦门 程序人生 373
上一篇: 可执行文件从装载到运行的全过程描述
下一篇: 动态链接库中与地址无关代码(PIC)对于地址引用的处理
Virtual_Func
博客等级 码龄11年 38粉丝 113原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值