第三章 目标文件里有什么

来源:互联网 发布:websock java 编辑:程序博客网 时间:2024/06/09 17:39
第三章 目标文件里有什么
1、目标文件的格式
目标文件:源代码编译后但未进行链接的中间文件,有些符号或地址还没有被调整
可执行文件格式:可执行文件windows的PE和linux的ELF、动态链接库windows的.dll和linux的.so、静态链接库windows的.lib和linux的.a
静态链接库:把很多目标文件捆绑在一起形成一个文件,再加上一些索引,理解为包含很多目标文件的包



2、目标文件结构
编译后的机器指令代码、数据,还有链接时需要的信息,如符号表、调试信息、字符串等
1)按照段形式存储
①文件头
描述整个文件属性,有一个段表,描述了文件中各个段的偏移地址及段的属性
②代码段
编译后中的机器代码
③数据段
初始化的全局变量和局部静态变量
④bss段
未初始化的全局变量和局部静态变量
2)数据和指令分段的好处
①装载后,数据和指令被分别映射到两个虚存区域,可以被分别设置成可读写和只读
②分离有利于提高程序的局部性,提高缓存命中率
③系统运行多个该程序的副本,内存只需保存一份程序的指令,节省内存空间

3、C++符号修饰
函数签名包含了一个函数的信息,包含函数名、参数类型、所在类和名称空间

4、extern "C"
作用:C++为了与C兼容
extern "C" {      int func(int);      int var;}
大括号内部的代码会当做C语言代码处理
同时被C语言和C++语言包含,兼容它们,使用C++的宏"__cplusplus",C++编译器会在编译C++程序时默认定义这个宏
#ifdef __cplusplusextern "C"{#endifvoid *memset(void *, int, size_t);#ifdef __cplusplus}#endif