随笔分类 -  链接与加载

摘要:来源:Assembler and loader渣翻译啊,先来无事做。AShortHistoryofAssemblersandLoaders汇编器和加载器简史OneofthefirststoredprogramcomputerswastheEDSAC(ElectronicDelayStorageAutomaticCalculator)developedatCambridgeUniversityin1949byMauriceWilkesandW.Renwick[4,8&97].FromitsveryfirstdaystheEDSAChadanassembler,calledInitialO 阅读全文
posted @ 2013-11-12 23:11 李可以 阅读(1090) 评论(0) 推荐(0)
摘要:觉得这一章写的很乱,我懒得看windows的知识,也懒得看ibm的知识,所以直接上unix吧。一、目标文件中都有什么?一个目标文件包含五类信息。头信息:关于文件的整体信息,诸如代码大小,翻译成该目标文件的源文件名称和创建日期等。目标代码:程序和数据重定位信息:一个位置列表,链接器在修改目标代码的地址时会对他进行调整。符号:该模块定义的全局符号(导出),以及从其它模块导入的符号,或者由链接器定义的符号。调试信息:目标代码中与链接无关但会被调试器使用到的其他信息。二、设计一个目标文件格式。一个目标文件可能是可链接的(可重定位的),可执行的,可载入的(共享库)。一个可链接的目标文件包含目标代码所需的 阅读全文
posted @ 2013-08-28 21:22 李可以 阅读(709) 评论(0) 推荐(0)
摘要:链接器和加载器做什么?任何一个链接器和加载器的基本工作都非常简单:将更抽象的名字与更低层的名字绑定起来,好让程序员使用更抽象的名字编写代码。地址绑定:从历史的角度编译时绑定链接时绑定加载时绑定运行时绑定都是为了节省代码。虚拟内存的出现,使分段出现?动态链接库的出现。链接器与加载器完成几个相关但概念上不同的动作。程序加载:将程序从辅助存储设备拷贝到主内存中准备运行。分配存储空间,设置保护位,或通过虚拟内存将虚拟地址映射到磁盘内存页上。重定位:汇编器为每个文件创建程序地址从0开始的目标代码,但是实际情况是会被加载到不同的地址,调整程序中的数据和代码以反映所分配地址的过程。 典型的过程是:多个子程序 阅读全文
posted @ 2013-08-27 21:23 李可以 阅读(416) 评论(0) 推荐(0)
摘要:本章是从__链接和加载__这一章扣出来的。(好,暂停,在这里我要说一说我的想法,进程当然有基地址,然后硬件会给每个加载进内存的程序的代码和数据的地址进行调整。这样便支持了运行时绑定。可以注意到,出了动态链接库或者说共享库,程序代码不许要保留其他符号,保留的符号必然是DLL或这.a文件里的。而这样的文件正是链接程序生成的,链接程序为了生成这样的程序需要付出什么代价呢?每一个目标文件有基地址,代码段和数据段所有使用内存地址是num+pbase的格式。对一个目标文件而言pbase为0,num也肯定都为正。符号表仍然保留,是为了那些共享库。(头痛,其实还有外部引用问题。)多个目标文件链接时,将记录基地 阅读全文
posted @ 2013-08-27 15:42 李可以 阅读(496) 评论(0) 推荐(0)