首页 > 系统相关 >Linux环境下:程序的链接, 装载和库[静态链接]

Linux环境下:程序的链接, 装载和库[静态链接]

时间:2023-02-04 22:37:07浏览次数:39  
标签:00 int 装载 地址 swap Linux main 链接

看以下例子
main.c

extern int x;

int main()
{
    int y = 100;
    swap(&x,&y);
    return 0;
}
int x = 1;

void swap(int* x, int* y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}

段的合并

main.o
image.png
swap.o
image.png

链接生成静态库: ld main.o swap.o -e main -o stlink 将多个目标链接生成可执行文件,默认好像是静态链接
image.png

可以看到生成的stlink的.text .data的大小是原先两个文件之和。2c + 2c = 58

重定位

main.o 反汇编 objdump -d -s main.o
image.png
swap.o
image.png
通过 objdump -r main.o查看目标文件中有哪些是需要重定位的符号
image.png
可以看到main.o中的.text 段有两个符号需要重定位,一个是参数x,一个swap函数,OFFSET分别是17和21。从相应的从main.o 反汇编中可以看到这两个offset处的地址都是 00 00 00 00 是因为在生成main.o的时候还无法确认这些符号的位置(中间b8也是00.. 是为啥?)。
通过readelf -s main.o也可以得到相同的结果(图中的x和swap是UNDEFINED的)
image.png
重定位后 objdump -d -s stlink
image.png
可以上面需要relocate的位置已经被替换了 参数x 替换成了 600198 这个对应合并后 .data段的绝对地址。
函数swap则是使用的相对寻址 绝对地址是400114,相对地址=下一定要执行的地址和真实swap地址的偏移(400114-40010d=7)
image.png

标签:00,int,装载,地址,swap,Linux,main,链接
From: https://www.cnblogs.com/Aitozi/p/17092543.html

相关文章

  • linux基本功系列之history命令实战
    (文章目录)前言......
  • linux --- 0号进程,1号进程,2号进程
    0号进程0号进程称为idle进程,每个进程都有一个进程控制块PCB(ProcessControlBlock),PCB的数据结构类型是structtask_struct。idle进程对应的PCB是 structtask_structi......
  • LInux crontab
    crontab 内容简介一、crontab的基本介绍二、crontab语法三、crontab常用工具四、crontab的坑 一、crontab的基本介绍crontab是用来定期执行程序的命令,当安......
  • Linux系列教程(一)——Linux系统简介
    本系列教程将完整的讲解整个Linux相关的知识,这是楼主学完兄弟连的Linux教程之后重新对Linux知识体系的整理。个人感觉兄弟连的Linux教程可以很好的入门,从最基础的知识开......
  • 通过建立符号链接将C盘大文件搬到其他盘中腾出空间
    假设要将路径为c:\x\y的文件y移至d:\z下1.将文件y移动到d:\z下面(复制过去先放入回收站,没问题再删除原来的,避免数据丢失)。2.然后在c:\x下建立符号链接:mklink/d“c:\x\y......
  • Linux环境下:程序的链接, 装载和库[ELF文件详解]
    编译过程拆解预处理处理生成.i文件,.i文件还是源码文件将所有的宏定义#define展开。处理#if,#else,#endif等条件编译指令处理#include,原地插入文件cppHelloW......
  • Linux文件系统
    Linux文件系统......
  • Linux的起源
    Linux的起源......
  • Linux之LVM管理 pvcreate,vgcreate,lvcreate命令
    一、逻辑卷管理(LVM)概念逻辑卷和逻辑卷管理有助于更加轻松地管理磁盘空间。如果托管逻辑卷的文件系统需要更多空间可以将其卷组中的可用空间分配给逻辑卷,并且可以调整文件......
  • linux中小文件传输rz,sz
    linux中小文件传输rz,szrz输入rz从windows中弹出窗口选择文件传输到linux服务器当前目录sz输入sz加文件名传输到windows,弹出窗口选择目录存储rz,sz安装如果提示找......