![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
什么是二进制程序
文章平均质量分 82
linux_carlos
这个作者很懒,什么都没留下…
展开
-
程序的预处理
编译器提供的这些预处理命令,大大方便了程序的编写:通过头文件包含可以实现模块化编程;通过#pragma预处理命令可以设定编译器的状态,指示编译器完成一些特定的动作。预处理过程,其实就是在编译源程序之前,先处理源文件中的各种预处理命令。编译器是不认识预处理指令的,在编译之前不先把这些预处理命令处理掉,编译器就会报错。我们写了一个测试程序,分别使用预处理命令去定义一些宏和条件编译。为了方便编程,编译器一般为开发人员提供一些预处理命令,使用#标识。自己可示例分析 查看example.i 文件.原创 2024-04-12 22:44:38 · 409 阅读 · 0 评论 -
C程序的编译
经过预处理后的源文件,退去一切包装,注释被删除,各种预处理命令也基本上被处理掉,剩下的就是原汁原味的C代码了。接下来的第二步,就开始进入编译阶段。编译阶段主要分两步:第一步,编译器调用一系列解析工具,去分析这些C代码,将C源文件编译为汇编文件;第二步,通过汇编器将汇编文件汇编成可重定位的目标文件。原创 2024-04-13 22:03:36 · 748 阅读 · 0 评论 -
从源程序到二进制
*BSS段比较特殊,**一般来讲,未初始化的全局变量和静态变量会放置在BSS段中,但是因为它们未初始化,默认值全部是0,其实没有必要再单独开辟空间存储,为了节省存储空间,所以在可执行文件中BSS段是不占用空间的。知道了可执行文件的基本构成,我们也就知道了程序编译的大概流程,如图所示,就是将C程序中定义的函数、变量,挑挑拣拣、加以分类,分别放置在可执行文件的代码段、数据段和BSS段中。每个section用一个section header来描述,包括段名、段的类型、段的起始地址、段的偏移和段的大小等。原创 2024-04-11 22:06:57 · 2275 阅读 · 0 评论