十七、动态链接和加载(静态ELF加载器实现;调试Linux内核;动态链接和加载)

一、静态ELF加载器:实现

可执行文件

1、一个描述了状态机的初始状态(迁移)的数据结构

(1)不同与内存的数据结构,指针都被偏移量代替

(2)数据结构各个部分定义:/usr/include/elf.h

加载器(loader)

1、解析数据结构+复制到内存+跳转

2、创建进程运行时初始状态(argv,envp)

        搬移可执行文件头与文件内容

        构建执行初始化的堆栈

栈指针跳转

二、Linux内核加载

1、编译

(1)解压

(2)配置make menuconfig(生成.condif文件)

(3)编译make bzImage -j4 (-j 是多线程(CPU)编译编译)

2、编译结果

(1)vmlinux(elf格式的内核二进制代码)

(2)vmlinuz(压缩的镜像,可以直接被QEMU(由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器软件)加载)

(3)readelf入口地址0x1000000(物理内存16M位置)

        __startup_64:调试起来

  三、动态链接和加载

减少库函数的磁盘和内存拷贝

1、每个可执行文件里都有所有库函数的拷贝太浪费磁盘或者内存

2、主要遵循基本约定,不挑库函数的版本

大项目的fenjie

1、编译一部分,不用重新链接

LOAD(lib.dl)//加载动态库

IMPORT(lib_fun_Symbol)//加载外部符号

EXPORT(lib_fun_Symbol)//动态库导出符号

四、GOT与PLT

GOT: Global Offset Table

PLT:Procedure Linkage Tabel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值