20145339《信息安全系统设计基础》第5周学习总结

本文介绍了GCC编译器的工作原理及其如何将C程序转换为可执行文件的过程。包括intel处理器的不同型号及其特点,以及如何使用GCC命令进行编译、汇编和反汇编等操作。同时,还介绍了如何利用GDB进行程序调试的方法。

程序的机器级表示

GCC C语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序的每一条指令。

intel处理器的模型:

8086:

它是第一代单芯片、16位微处理器之一。体系结构上讲只有20位长。

i386:

体系结构扩展到了32位,Linux和Windows系列操作系统都是使用的这种模式,这是Intel系列中第一台支持Unix操作系统的机器。

80286:

增加了更多的寻址模式,构成了IBM PC—AT个人计算机的基础,这种计算机是MS Windows最初的平台。

程序编码:

假设一个c程序,有两个文件p1.c和p2.c。我们用unix命令编译这些的代码如下

unix> gcc -o1 -c p p1.c p2.c

"gcc"指的是GCC C编译器,将源代码转换成可执行代码。 “-o1”告诉编译器使用第一级优化。

在命令行上使用“-s”选项,就能得到c语言编译器的汇编代码c:

unix> gcc -o1 -s code.c

在命令行上使用“-c”选项,GCC会编译并汇编该代码:

unix> gcc -o1 -c code.c

反汇编器,程序根据目标代码产生一种类似于汇编代码的格式:

unix> objdump -d code.o

生成可执行文件prog:

unix> gcc -O1 -o prog code.o main.c

我们用下面的命令来启动GDB:

unix> gdb prog 我们可以以各种方式查看哥哥寄存器和存储器位置

命令对应的效果:

quit          退出GDB

run           运行程序

kill             停止程序

stepi         执行第一行指令

stepi4       执行第四行指令

nexti         类似于stepi 但以函数调用为单位

continue    继续执行

help          获取有关GDB的信息

转载于:https://www.cnblogs.com/dj20145339/p/5967687.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值