摘要: 今日开始看第七章的动态链接,看完前三节之后,对于动态链接的基本概念有了了解,但是在学习位置无关代码PIC机制的时候,貌似读懂了,可是当结合昨天的“可执行文件的装载和进程”考虑东西的时候却感觉很混沌,特此暂时停读对头脑中的东西进行一次再梳理,排除一些错误的概念。以下基本上以Linux下的ELF文件为例。 基本术语: VMS——进程虚拟地址空间,PMS&... 阅读全文
posted @ 2009-12-24 17:43 TryKnowWhy 阅读(604) 评论(0) 推荐(0)
摘要: 第六章开始涉及可执行程序在操作系统环境下的装载,并在OS下以进程模型运行,有众多的重要概念,昨夜熬读至凌晨4点,基本了解了框架,但是不少地方还是有些混沌,特此重新梳理和理解~~~基本的缩写: VMS——进程虚拟地址空间 PMS——物理内存空间 EFS——可执行文件空间l 可执行文件和进程关系的“厨房比喻”... 阅读全文
posted @ 2009-12-16 18:08 TryKnowWhy 阅读(491) 评论(0) 推荐(0)
摘要: 第五章在之前初步熟悉Linux ELF文件格式的基础上,开始介绍了Windows下的目标文件和可执行文件PE/COFF的基本格式。所有内容对我来说也是全新扫盲了。 Windows系统中可执行文件格式为PE(Portable Executable),这是根据COFF文件格式稍作改动扩展发展而来的,框架与COFF基本一致,另外对于Windows平台下的编译器来说,编译生成的目标文件仍然是COFF格式,... 阅读全文
posted @ 2009-12-14 18:52 TryKnowWhy 阅读(353) 评论(0) 推荐(0)
摘要: 书的第四章开始真正直面静态链接的过程细节了,在此纯粹根据自己的理解和头脑中的逻辑思维路线梳理读书所得 经过编译器的a.c和b.c得到了可重定位的两个目标文件a.o和b.o,链接器执行 ld a.0 b.0 -e main -o ab 命令后得到了从main函数作为程序入口的可执行程序ab —— 默认地,ld将以_start作为程序入口。 ab的ELF文件结构由a.o和b.o... 阅读全文
posted @ 2009-12-14 15:34 TryKnowWhy 阅读(523) 评论(0) 推荐(0)
摘要: 今天进入了第三章目标文件的学习和分析,所接触的东西对于我来说基本上都是扫盲了,呵呵,收获非浅~~~~ 经过预编译、编译和汇编得到的目标文件,从文件结构上来说,与经过链接后得到的可执行文件已经没有多少差别了,故而可以将目标文件与可执行文件看作一个类型的文件。当前PC环境下的可执行文件主要是Windows平台下的PE格式和Linux下的ELF格式,二者其实都源于COFF格式,所以PE-COFF和ELF... 阅读全文
posted @ 2009-12-09 12:41 TryKnowWhy 阅读(850) 评论(0) 推荐(0)
摘要: IDE环境下的 Build其实是预编译、编译、汇编和链接四个过程的合并。Linux下针对C语言的预编译编译程序为cc1,针对C++的是cc1plus,针对JAVA的是jc1,或gcc -c——gcc实际上是针对不同高级语言的多个预编译编译器的包装,根据不同的gcc参数,调用cc1、cc1plus、cc1obj、jc1、汇编器as、链接器ld编译器的基本工作流程如下:词法扫描... 阅读全文
posted @ 2009-12-07 22:19 TryKnowWhy 阅读(255) 评论(0) 推荐(0)
摘要: 写给自己的:今天开始读《程序员的自我修养》,面临着作者针对HelloWorld程序提出的九点问题的思考,扪心自问除了第一个问题“程序为什么要被编译器编译了之后才可以运行”尚可浅答外,其他的问题要么是一团糊,要么是一片白——汗颜之至~~~~但也正印了作者随后“本书正是为你准备之言”,现在去后悔之前的荒废也好,低效也好毫无意义,唯有勤奋努力以应之,这也才是真正我修养的一种提高吧。   现代... 阅读全文
posted @ 2009-12-06 17:49 TryKnowWhy 阅读(438) 评论(0) 推荐(0)