操作系统
文章平均质量分 72
Linyco
这个作者很懒,什么都没留下…
展开
-
可执行文件的装载过程
应用程序,其实就是一系列的指令,以及指令所操作的数据。为了执行这些指令,并通过指令操作数据,需要将应用程序文件加载到内存中。然后从程序的入口开始逐条执行程序文件中的指令。 在介绍应用程序的装载过程之前,需要先了解可执行文件映射到内存后的布局情况。应用程序的内存通常是按如下方式分布: 每个应用程序的逻辑内存在32位机器上共有4GB,上图只标出原创 2012-05-12 17:12:26 · 1394 阅读 · 0 评论 -
Linux共享库组织
1. 版本组织 Linux共享库版本组织主要分为共享库版本和符号版本: 1) 共享库版本: 共享库采用x.y.z的方式标识共享库版本,x为主版本号,y为次版本号,z为发布版本号; 当主版本号发生变化时,代表共享库版本发生了不兼容的变化,如函数签名变化、接口数据结构变化、函数行为变化等; 当次版本号发生变化时,代表共享库版本增加了新特性,但已有原创 2012-05-12 16:14:30 · 1241 阅读 · 0 评论 -
目标文件结构介绍
开发人员开发的代码,需要经过编译和链接两个过程,才能生成最终的可执行文件,或共享文件(Linux的.so或windows的.dll文件)。其中链接文件(或称为目标文件,在Linux下为.o,在windows下为.obj)是编译器编译后生成的文件。在链接时,链接器再将它链接成为可执行文件或共享文件等。 目标文件的格式主要是Linux平台下的ELF(ExecutableLinkabl原创 2012-05-12 18:21:55 · 1293 阅读 · 0 评论 -
编译器的符号修饰规则
编译器编译源代码生成目标文件时,需要为每一个变量、函数生成符号,保存到符号表。在符号表中,每一个符号必须唯一,因此要求源代码中不能存在与其它文件中的变量名、函数名相同的函数,包括使用到的库中的函数。 为了解决符号名冲突的问题,编译器会对源代码中的符号进行修饰,如UNIX下编译生成的符号会在符号名前加下划线”_”。 一些高级语言如C++,则需要更为复杂的方式进行符号修饰。原创 2012-05-12 20:48:45 · 2983 阅读 · 0 评论 -
链接的目的链接过程
1. 链接的目的 源代码经过编译后,生成了一系列的目标文件。每一个目标文件,具有自己的代码段、数据段、符号表、重定位表等信息(参考目标文件结构介绍)。 在代码段中,编译生成的机器代码需要访问数据段的数据,或是代码段的函数。但在单个目标文件中,只有局部的数据和代码信息。如下例: 文件a.c: unsigned long a = 10;原创 2012-05-12 20:22:07 · 1950 阅读 · 0 评论