jsp网站开发pdf,松岗做网站费用,12306网站建设团队,软件网站怎么做的【-1】相关声明
本文总结于csapp#xff1b; 了解详情#xff0c;或有兴趣#xff0c;建议看原版书籍#xff1b;【0】程序编码
GCC调用了一系列程序#xff0c;将源代码转化成可执行代码的流程如下#xff1a;
#xff08;1#xff09;C预处理器扩展源代码#xf…【-1】相关声明
本文总结于csapp 了解详情或有兴趣建议看原版书籍【0】程序编码
GCC调用了一系列程序将源代码转化成可执行代码的流程如下
1C预处理器扩展源代码插入所有用#include命令指定的文件并扩展声明的宏2编译器产生两个源代码的汇编代码*.s3汇编器将汇编代码转化为二进制目标代码 *.o ; 目标代码是机器代码的一种形式它包含所有指令的二进制表示但没有填入地址的全局值4链接器将目标代码与实现库函数的代码合并最终产生可执行代码文件
【1】机器级代码
对于机器级编程来说两种抽象很重要
1机器级程序的格式和行为定义为指令集体系结构2机器级程序使用的存储器地址是虚拟地址
Attentionos负责管理虚拟地址空间 将虚拟地址翻译成实际处理器存储器中的物理地址 【2】要知道处理器的状态是可见的
1程序计数器pc指示将要执行的下一条指令在存储器中的地址2整数寄存器文件包含8个命名的位置3条件码寄存器保存着算术或者逻辑指令的状态信息4一组浮点寄存器存放浮点数据
【3】代码示例联系开头的程序编码首文
3.1gcc编译器产生汇编代码
gcc -O1 -S code.c generates code.s
gcc -O1 -S p107.c generates p107.s3.2gcc编译并汇编该代码
gcc -O1 -c p107.c 产生目标代码p107.o 它是二进制格式所以无法直接查看。3.3反汇编器-disassmbler 根据目标代码产生类似于汇编代码的格式
objdump -d p107.o p107-dis.s 3.4生成可执行文件 prog
gcc -O1 -o prog p107.o p107-main.c3.5反汇编prog文件
objdump -d prog prog-dis.s int accum 0;
int sum(int x, int y)
{int t x y;accum t;return t;
}Attention
A0这段代码L121~L128和 p107-dis.s 的代码几乎完全一样。A1其中一个主要的区别是左边列出的地址不同——链接器将代码的地址移到一段不同的地址范围中。A2第二个不同之处在于链接器确定了存储全局变量accum的地址。A3在p107-dis.s的12行很明显accum0 而在prog的反汇编指令中L126accum的地址就设置为0x8049634了。
【4】ATT与intel 汇编代码格式
ATT是GCC、OBJDUMP和其它一些我们使用的工具的默认汇编格式 其它一些编程工具 包括Microsoft工具以及来自intel的文档其汇编代码是intel格式的