博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《程序员的自我修养-链接、装载和库》
阅读量:6709 次
发布时间:2019-06-25

本文共 935 字,大约阅读时间需要 3 分钟。

第一章.温故而知新
最近电脑出了点故障,到电脑城维修,说是桥芯片坏了,刚好看到本书中关于计算机体系结构介绍北桥芯片是为了协调CPU,内存和高速图形设备之间的访问,速度非常快,而南桥芯片主要负责处理外鼠标,键盘,打印机等低速设备,并汇总到北桥芯片中.
第二章
程序从源文件到可执行文件:预处理替换和去除预处理指令如:#define, #if #endif等, 编译进行词法分析语法分析语义分析生成目标文件(linux *.o文件, windows *.obj文件),最后将目标文件链接生成可执行文件.
windows下的PE文件格式和linux下的ELF文件格式都是在COFF基础上生成的,将文件分为几个段如代码段: .text, 数据段(初始化过): .data, 未初始化数据段: .bss, 只读数据段:  .rodata
第六章.可执行文件的装载与进程
(1)检查ELF可执行文件格式的有效性, 比如魔数,程序头表中段的数量.
(2)寻找动态链接的".interp"段, 设置动态链接器路径.
(3)根据ELF可执行文件的程序头表的描述, 对ELF文件进行映射,比如代码,数据,只读数据.
(4)初始化ELF进程环境, 比如进程启动时EDX寄存器的地址应该是DT_FINI的地址.
(5)将系统调用的返回地址修改成ELF可执行文件的入口点,这个入口点取决于程序的链接方式, 对于静态链接的ELF可执行文件,这个程序入口就是ELF文件的文件头中e_entry所指的地址,对于动态链接的ELF可执行文件,程序入口点是动态连接器
当load_elf_binary()执行完毕,返回至do_execve()再返回至sys_execve()时,上面5补中已经把系统调用的返回地址改成了被装载的ELF程序的入口地址了,所以当sys_execve()系统调用从内核态返回用户态时, EIP寄存器直接跳转到了ELF程序的入口地址,于是新的程序开始执行, ELF可执行文件装载完成.
第七章.
动态库中的全局变量在加载时,在当前进程中会保存一个副本,防止不同进程进行访问时发生冲突.

转载于:https://www.cnblogs.com/ourroad/p/3331745.html

你可能感兴趣的文章
引领新ICT 华为企业业务参加CeBIT 2016预热大会
查看>>
戴尔在新加坡设立IoT实验室
查看>>
云南:加强数据开放共享 服务农业产业化
查看>>
拆分一年多了,“两个惠普”公司过得还好不好?
查看>>
电脑病毒或可通过声音进行传播?
查看>>
几个Linux驱动面试题目
查看>>
外媒分析富士康收购夏普的5大原因
查看>>
强强联手-赛迪中科数据中心联合实验室应运而生
查看>>
Web应用防火墙:必须拥有还是面临淘汰?
查看>>
码农的性能测试
查看>>
微软孵化平台筑“巢”南京
查看>>
我的第一个物联网项目:一份企业物联网项目指南
查看>>
安防迎来5G时代来临 是机遇还是挑战?
查看>>
中情局黑客武器库曝光,苹果安卓加密系统均被突破
查看>>
对Gogo不满 微软也来掺和飞机WiFi服务
查看>>
diy高手在民间
查看>>
国产IT彪起来了,后浪要将前浪拍死在沙滩上
查看>>
安防软件系统集成解决方案 想说爱你不容易
查看>>
《Tableau数据可视化实战》——1.7节连接其他数据库
查看>>
《C语言解惑》—— 1.1 中文字符以假乱真
查看>>