CSAPP-深入理解计算机系统 Chapter1 (1-1.计算机漫游系统)

(课程链接:【CSAPP-深入理解计算机系统】1-1.计算机系统漫游_哔哩哔哩_bilibili

(本人是一名大一学生,在努力学习计算机相关知识,注内部分皆是我通过AI所了解的知识点)

Chapter 1. A Tour of Computer System(计算机漫游系统)

一、The Lifetime of Hello Program(hello world程序的生命周期)

1.Create

源代码编写完成之后,保存得到一个后缀为.c的文件——hello.c

2.The Compilation System

接下来通过上方简单的命令即可完成对源代码的编译,生成可执行文件hello 

敲完这条命令,按下回车键,刚才我们编写的hello.c经过编译系统(gcc)之后,就可以生成了一个可执行程序——hello

          (本人对Linux系统没有详细的了解过,因此用AI对Linux相关知识进行补充,注内皆是对相关资料查询)

           注:在Linux系统下使用GCC编译器进行C语言程序编译的一条命令行语句。

           1.gcc:是GNU Compiler Collection(GNU编译器套件)的简称,在Linux系统中常用的用于编译C,C++等语言程序的工具将高级语言编写的源程序转化为可执行工具

           2.-o hello:-o是gcc的一个选项,用于指定输出文件名,表示将编译后的可执行文件命名为hello,即编译成功后,在当前目录下会生成一个名为hello的可执行文件

           3.hello.c:编译的C语言程序文件名,gcc会读取hello.c文件中的代码,对其进行预处理、编译、汇编和链接等一系列操作,终生成前面-o选项指定的指定的可执行文件

上述过程可细分为:

Stage1.预处理器根据以#开头的代码,来修改原始程序

     例如,hello程序中引入了头文件——stdio.h

     预处理器会读取该头文件中的内容,将其中的内容直接插入到源程序中,得到了另外一个C程序

Stage2.包括词法分析、语法分析、语义分析、中间代码生成、优化等等一系列的中间操作(详细了解可参考《编译原理》)

Stage3.汇编器根据指令集将汇编程序hello.s翻译成机器指令,将一系列机器指令按照固定规则进行打包

Stage4.链接器(ld)负责把hello.o和printf.o进行合并,需要遵循一定规则,ld对hello.o和printf.o进行调整,因此hello.o才会被称为可重定位目标文件,最终通过链接阶段得到可执行目标文件——hello

Q:Why Programmers Need to Understand How Compilation System Work?(为什么要理解编译系统如何工作的?)

      1.Optimizing program performance(优化程序性能)

      2.Understanding link-time errors(理解链接时出现的内存)

      3.Avoiding security holes(避免安全漏洞) 

             缓冲区溢出(buffer overflow)导致互联网安全漏洞的主要原因

                 预防(1)理解数据和控制信息在程序栈上如何储存

                        (2)不严谨、不规范的书写方式的后果

3.Run Hello Program by Shell(如何运行hello的可执行文件)

    method:打开shell程序,然后在shell中输入相应可执行程序的文件名

    shell程序的介绍:

            shell是一个命令解释程序,它输入一个提示符>来等待一个命令行的输入,然后执行这个命令。若该命令的第一个单词不是内置的shell命令,那么shell就会假设这是一个可执行文件的名字,对此文件进行加载并运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值