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

程序的机器级表示

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的信息

posted on 2016-10-16 20:54  20145339顿珠  阅读(96)  评论(1编辑  收藏  举报