首先讲讲编译系统的过程,大概有四个步骤。
预处理器:根据程序中以#开头的命令,对源代码进行修改,得到另一个C程序,以.i为扩展名。
编译器:ccl将hello.i翻译成文本文件hello.s,这是一个汇编指令程序。
汇编器:as将hello.s翻译成机器码,并将这些指令打包,打包成可重定位目标程序,也就是obj文件。
链接器:负责合并obj文件,得到可执行目标文件hello。比如hello用到了printf函数,那么链接器就将printf.o和hello.o合并最后的可执行程序中。
知道了上面的过程之后,我们要知道一个lib文件是obj文件的集合。当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件。也就是所有.lib和.dll文件、.a和.so文件都是二进制文件。如果想通过这些二进制文件(比如obj文件、exe文件)获取源代码,这是很困难的,没有直接方法。间接的方法就是通过反汇编。
知识储备:
程序的装入:即什么是重定位:请点击 程序的装入
注:.o文件是可重定位的二进制文件,也就是他还没有进行链接,即没有配上一些静态库或者动态库,可执行文件是在装入之后才会产生的。
计算机---之编译过程
最新推荐文章于 2024-07-01 16:21:22 发布