一.可执行文件的格式Linux系统上可执行程序的格式为ELFWindows系统上可执行的程序的格式为PE二.内存与硬盘的关联内存只有运行某个程序的时候暂时装载到内存上但是这个程序存储在硬盘上暂时存储文件装载文件并执行文件。硬盘永久存储设备三.汇编语言低级编程语言直接对接机器语言二进制指令但使用了一些助记符来帮助人类记忆更接近底层语言。特点1.与硬件强关联不同的CPU架构下汇编指令集差异大架构X86 ARM2.可以直接操作硬件直接访问寄存器、内存地址、CPU标志位例如机器指令 汇编助记符 高级语言0101 add ab四.gcc编译器分步编译链接:1预编译阶段把头文件全部弄进去gcc -E main.c -o main.i{.i:预处理文件-o:输出一个文件}2编译阶段gcc -S main.i -o main.s(.s汇编文件)3汇编阶段gcc -c main.s -o main.o.o二进制文件4链接阶段gcc main.o -o main五.多文件编译1核心将对应的.o文件集中编译即可生成可执行文件2makefile:用于自动化构建过程的配置文件用于定义如何编译文件链接程序清理文件操作常用于 多文件 多模块的大型项目编译注如果加了除生成文件之外的指令想执行该指令时需要外部输入make该指令的标志位将我们想要编译的文件进行集中编译生成可执行文件5make:根据makefile文件的规则生成可执行程序六.gdp调试debug版本为调试版本生成可执行文件包含调试所需要的信息作为开发人所常用的就是debug版本的可执行文件release版本不可调试版本 提供给用户使用的版本1创建一个stirng.c的文件这个是string.c文件的内容因为进入到输入的时候\n也属于一个字符 如果不把\n置为\0 就永远不会跳出循环因为此时当我输入end时还会按\n此时 字符串就是end\n 所以就一直无法跳出循环2gdb调试阶段在调试阶段因为计算机只能识别二进制文件 所以要将.c文件编译成.o文件 也就是可执行文件此时就将 string.c文件编译成为了名字为string的.o文件进行调试gdb已经编译好的二进制文件名 此时就进入了调试阶段l:表示展开此时文件string的10行内容ll:就是展开该文件的所有内容b行号表示在该行下断点 delete断点号表示删除这个断点r表示运行程序Input 提示输入在输入一个字符串之后 继续进入循环在输入end之后继续输入n表示逐行运行直到跳出循环Q表示退出调试 返回到用户目录下