首页 > 其他分享 >静态链接的整个过程

静态链接的整个过程

时间:2023-03-11 21:31:39浏览次数:23  
标签:定位 符号 静态 Elf32 int 整个 shared 链接


1空间分配

例子:
/*a.c*/
extern int shared;int main()
{
int a = 100;
swap(&a,&shared);
return 0;
}
/*b.c*/int shared = 1;
void swap(int *a,int *b)
{
int temp;
temp = (*a);
(*a) = (*b);
(*b) = temp;
}
下面进行空间分配:

A 按序叠加
静态链接的整个过程_目标文件​​

B 相似段合并

​​静态链接的整个过程_静态链接_02​​

两步链接法
1
扫描输入文件,得到段属性,收集符号定义和引用,放到全局符号表,链接器得到每一个目标文件的段长,计算输出文件的合并段长和位置,建立映射关系。 
2 读取文件中段数据和重定位信息,进行符号解析,重定位,和调整代码中地址。

2.重定位和符号解析

在其他目标文件中定义的变量或者函数(通称符号),编译器会把他们的地址暂时以0x00000000和0xFFFFFFFC代替,真正的计算过程则交给了链接器。链接器完成空间和地址的分配之后可以确定所有符号的虚拟地址,根据虚拟地址,对每一个需要重定位的指令修改。
需要重定位的指令: 这里会有一个重定位表,或称重定位段,加入代码段有序哟重定位的指令,则会有相应的.rel.data段。 
重定位表的结构:

typedef struct {

    Elf32_Addr r_offset;//修正位置第一个字节相对于段的偏移

    Elf32_Word r_info;//重定位入口符号和类型

}Elf32_Rel;

标签:定位,符号,静态,Elf32,int,整个,shared,链接
From: https://blog.51cto.com/u_12834811/6114981

相关文章

  • Http是默认是长连接还是短链接
    HTTP协议与TCP/IP协议的关系HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻......
  • jdbc 链接 oracle 查询
    Oracle默认端口号为:1521Stringurl="jdbc:oracle:thin:@localhost:1521:orcl";报错1:ClassNotFoundException:oracle.jdbc.driver.OracleDriver:缺少pom依赖:<depen......
  • 超链接伪类
    <doctypehtml><html><head>  <metacharset="utf-8">  <title>study</title>  <linkrel="stylesheet"href="study.css"type="text/css">  <sty......
  • Nginx基础 - 04静态资源
      一、静态资源类型Nginx作为静态资源Web服务器部署配置,传输非常的高效,常常用于静态资源处理、请求、动静分离。非服务器动态运行生成的文件属于静态资源。类型......
  • 不支持设置运行目录主机thinkphp伪静态使用方法.htaccess
    不支持设置运行目录主机thinkphp伪静态使用方法.htaccess资源宝分享:​​www.httple.net​​<IfModulemod_rewrite.c>RewriteEngineonRewriteBase/RewriteCond%{REQUEST_......
  • 第六节:pnpm剖析(简介、硬/软链接、实操、配置、原理)
    一.pnpm简介1.官网的给出的定义 官网:https://pnpm.io/zh/ 快速的,节省磁盘空间的包管理工具优势: 当使用npm或Yarn时,如果你有100个项目,并且所有项目都有......
  • Visual Studio 编译静态库过程
    一、问题引入在写程序过程中,一般都是直接写xx.h和xx.c文件。基本上依靠这两个文件就可以完成一个简单的小项目,但是一旦构建一个大项目就会产生很多文件。这时一部分基......
  • 实例方法,静态方法和类方法详解
    实例方法,静态方法和类方法详解和类属性一样,类方法也可以进行更细致的划分,具体可分为类方法、实例方法和静态方法。和类属性的分类不同,对于初学者来说,区分这3中类方法是......
  • Vue 使用插件 Plugin,管理静态常量
    Vue常量使用第一种方法单独定义一个constant.js,内容如下://大屏卡片标题exportconstBIG_SCREEN_CARD_TITLE={memberCount:'注册人员数',todayCou......
  • .NET静态代码织入——肉夹馍(Rougamo) 发布1.4.0
    肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件,其主要特点是在编译时完成AOP代码织入,相比动态代理可以减少应用启动的初始化时......