【Linux操作系统分析】实验一:计算机是怎样工作的

本文详细介绍了从C源代码到可执行文件的整个编译流程,包括预处理、编译、汇编和链接四个阶段,并通过一个简单的示例程序演示了各阶段的输出文件。
学号:SA11**6254
实验内容:请使用Example的c代码分别生成.cpp,.s,.o和ELF可执行文件,并加载运行,分析.s汇编代码在CPU上的执行过程。

从源代码到可执行文件共经历四个步骤:
1.预处理
预处理是在程序源代码被编译之前,由预处理器对程序源代码进行的处理。这个过程并不对程序的源代码进行解析,但它把源代码分割或处理成为特定的符号用来支持宏调用。

gcc –E test.c –o test.i

扩展源代码,插入所有用#include命令的指定的文件,并扩展多有用#define声明指定的宏。

2.编译
编译是执行词法分析语法分析等检查后将高级语言转换为汇编代码;

gcc –S test.i –o test.s 或 gcc –S test.c –o test.s

编译过程就是把预处理完的文件进行一系列词法分析语法分析语义分析优化后生成相应的汇编代码文件

将test.i翻译成test.s,它包含一个汇编语言程序,汇编语言程序中的每条语句都以一种标准的文本格式确切地描述了一条低级机器语言指令。

3.汇编
汇编是将编译生成的汇编代码转换成机器代码即二进制代码(目标代码)

as test.s –o test.o 或 gcc –c test.s –o test.o 或gcc –c test.c –o test.o

汇编器将test.s翻译成机器语言指令(字节编码),打包成可重定位的目标文件test.o,它是一个二进制目标文件。

4.链接
链接的作用是将多个目标代码同库文件进行连接最终生成可执行程序。
将目标代码文件与实现库函数的代码合并,并产生最终的可执行代码文件test
这四个步骤分别生成.cpp、.s、.o/.obj和ELF文件。
example.c原文件:
  1. int g(int x)
  2. {
  3.    return x+3;
  4. }
  5. int f(int x)
  6. {
  7.    return g(x);
  8. }
  9. int main(void)
  10. {
  11.    return f(8)+1;
  12. }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值