2023年个人网站开发制作平台工作总结:这一年你有哪些收获?
摘要:网站开发制作平台,工作总结2023年个人,滨城区住房和城乡建设局网站,怎样做好邯郸网站建设【编译和链接六】汇编——目标文件 一、目标文件_存储格式1、生成目标文件2、目标文件存储格式3、file查看文件格式 二、查看目标文件的内部结构——o
网站开发制作平台,工作总结2023年个人,滨城区住房和城乡建设局网站,怎样做好邯郸网站建设【编译和链接六】汇编——目标文件 一、目标文件_存储格式1、生成目标文件2、目标文件存储格式3、file查看文件格式 二、查看目标文件的内部结构——objdump三、代码段四、 数据段和只读数据段五、 ELF文件结构描述1、头文件2、段表2.1、重定位表2.2、字符串表2.3、查看重定位表… 【编译和链接六】汇编——目标文件 一、目标文件_存储格式1、生成目标文件2、目标文件存储格式3、file查看文件格式 二、查看目标文件的内部结构——objdump三、代码段四、 数据段和只读数据段五、 ELF文件结构描述1、头文件2、段表2.1、重定位表2.2、字符串表2.3、查看重定位表 和 字符串表 六、调试信息 一、目标文件_存储格式
目标文件就是源代码编译后但未进行链接的那些中间文件Windows的.obj和Linux下的.o
1、生成目标文件
代码
#includestdio.hint global_init_var 123;
int global_uninit_var;void show( int i )
{printf( %d\n, i );
}int main()
{static int static_var 456;static int static_var2;int a 1;int b;show(a);return -1;
}生成目标文件的指令
gcc -c hello.c -o hello.o2、目标文件存储格式 目标文件跟可执行文件的内容与结构很相似所以一般跟可执行文件格式一起采用一种格式存储。 在Windows下我们可以统称它们为PECOFF文件格式。 在Linux下我们可以将它们统称为ELF文件。 其他不太常见的可执行文件格式还有Intel/Microsoft的OMFObject Module Format、Unix a.out格式和MS-DOS .COM格式等。 不光是可执行文件Windows的.exe和Linux下的ELF可执行文件按照可执行文件格式存储。动态链接库DLLDynamic Linking LibraryWindows的.dll和Linux的.so及静态链接库Static Linking LibraryWindows的.lib和Linux的.a文件都按照可执行文件格式存储。它们在Windows下都按照PE-COFF格式存储Linux下按照ELF格式存储。静态链接库稍有不同它是把很多目标文件捆绑在一起形成一个文件再加上一些索引你可以简单地把它理解为一个包含有很多目标文件的文件包。 3、file查看文件格式
file:查看文件格式
$file hello.o二、查看目标文件的内部结构——objdump
一般目标文件将这些信息按不同的属性以“节”Section的形式存储有时候也叫“段”Segment. 在一般情况下它们都表示一个一定长度的区域基本上不加以区别唯一的区别是在ELF的链接视图和装载视图的时候后面会专门提到。 objdump指令参数“-h”就是把ELF文件的各个段的基本信息打印出来。我们也可以使用“objdump –x”把更多的信息打印出来.
$objdump -h hello.o$objdump -x hello.o如上图目标文件的格式是ELF从图中可以看到ELF文件的开头是一个“文件头”它描述了整个文件的文件属性包括文件是否可执行、是静态链接还是动态链接及入口地址如果是可执行文件、目标硬件、目标操作系统等信息文件头还包括一个段表Section Table段表其实是一个描述文件中各个段的数组。段表描述了文件中各个段在文件中的偏移位置及段的属性等从段表里面可以得到每个段的所有信息。文件头后面就是各个段的内容比如代码段保存的就是程序的指令数据段保存的就是程序的静态变量
段段名解释.code或.text代码段程序源代码编译后的机器指令经常被放在代码段Code Section里.data数据段全局变量和局部静态变量数据经常放在数据段Data Section。让我们.bss数据段未初始化的全局变量和局部静态变量一般放在一个叫.“bss”的段里。.rodata数据段只读数据段,const的全局变量#define定义的常量以及诸如“Hello World”的字符串常量.comment注释信息段没太懂.note.GNU-stack编译信息编译器的版本信息段.en_frame调试信息调试时栈回溯时用到 const修饰的全局变量在常量区const修饰的局部变量只是为了防止修改没有放入常量区代码区.text。
