论C语言的编译

还没有学习操作系统运作的时候,总是不理解C语言编译出来的究竟是什么东西,就知道C语言的编译过程如下:

C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件。

实际上,我们需要结合不同的操作系统来理解这个过程,当然,编译器的工作过程如上是一定不变的,但是,针对不同的操作系统,结果上是不同的,譬如说,windows上编译的结果exe程序和DLL(这些结构,统称为PE文件,他们有固定的格式,弄过破解的人一定就很熟悉这种结构了,有查看这种文件的工具),肯定跟linux上编译出来的out,ELF格式文件,COFF格式文件。

这种根据操作系统产生不同的可执行代码主要发生在链接阶段,汇编程序产生的是目标文件,目标文件实际上已经一些机器码集合,但是,由于缺乏操作系统所需要的,运行程序所必要的信息,所以,是不可以直接执行的。链接程序实际上就是将需要拼接的目标代码拼接在一起,并且根据不同的操作系统,按照规定的文件格式存放代码,在windows下面是PE格式代码,而在linux下面就是out,ELF,COFF格式代码。

正是由于这种原因,一种操作系统的可执行代码不能够在其他操作系统里面直接运行,当然,可以开发出模拟器,模拟执行。

如果想更深入了解可执行文件格式,可以查看相关资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值