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

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

教材内容总结

X86寻址的三个时代:

1、DOS时代的平坦模式,不区分用户空间和内核空间,很不安全;

2、8086的分段模式;

3、IA32的带保护模式的平坦模式。

程序编码
  • 编译器产生汇编代码: gcc –s xxx.c 得到.s文件

        编译产生目标代码文件:gcc -O1 xxx.c 得到.o文件

        反汇编命令:objdump –d xxx

        直接编译64位处理器得到32代码的命令:gcc –S –o xxx.s xxx.c -m32

  • ISA:指令集结构ISA是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响
  • 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。
  • 有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看。

        od code.o | more

        od code.o > code.txt

        gcc -S 产生的汇编中可以把 以”.“开始的语句都删除了再阅读

访问信息
  • 操作数的三种类型:立即数、寄存器、存储器;
  • MOV指令:将原操作数的值复制到目的操作数中(不能够从存储器传送到存储器)
  • MOV相当于C语言的赋值”=“,注意ATT格式中的方向, 另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。
  • 栈:后进先出的原则

    push压栈,pop出栈

    栈顶:总是从这端插入和删除元素

    栈顶元素的地址是最低的

    栈指针%esp保存着栈顶元素的地址

算数和逻辑操作
  • 四组操作:加载有效地址:将有效地址写入目的操作数,目的操作数必须是寄存器

                     一元操作:只有一个操作数,既是源又是目的

                     二元操作:源操作数是第一个,可以是立即数、寄存器、存储器,目的操作数是第二个,可以是寄存器、存储器,但两个不能同时为存储器

                     移位:第一个是移位量,用单个字节编码且只允许0-31位的移位,可以是立即数或者放在单字节寄存器%cl中(算术右移SAR,填上符号位/逻辑右移SHR)

                     目的操作数可以是一个寄存器或存储器

控制

1、cmp(根据操作数的差设置条件码)、test指令只改条件码不改寄存器。

2、set指令操作数大小为单字节,得32位结果要对高24位清零。

3、跳转指令编码方法:目标指令地址-跳转指令后面那条指令得地址=编码。

4、goto代码:就是把汇编代码按顺序用c语言写出来,碰到跳转指令用goto。

5、c语言中的所以循环结构先转化为do-whlie结构,再转化为汇编代码。

过程

1、call指令:call指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。

2、ret指令:ret指从栈中弹出地址,并跳转到这个位置;ret指令返回到call指令后的那条指令。

3、leave指令:leave指令可以使栈做好返回的准备。

4、寄存器eax、edx、ecx为调用者保存寄存器,ebx、esi、edi为被调用者保存寄存器。

GDB

进入GDB  #gdb test

test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb)

查看源码  (gdb) l

设置断点  (gdb) b 6

这样会在运行到源码第6行时停止,可以查看变量的值、堆栈情况等;这个行号是gdb的行号。

查看断点处情况  (gdb) info b

可以键入"info b"来查看断点处情况,可以设置多个断点;

运行代码  (gdb) r

显示变量值  (gdb) p n

在程序暂停时,键入"p 变量名"(print)即可;

在程序暂停时,键入"p 变量名"(print)即可;

单步运行  (gdb) n

程序继续运行  (gdb) c

退出GDB  (gdb) q

代码调试中的问题和解决过程

实验楼练习

vim编写代码

查看汇编文件

将含有代码中以"."开头的编译器指令删除

代码托管

代码托管

学习进度条

 代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)
目标 3500行 30篇 300小时
第一周 50/50 1/2 10/10
第二周 120/170 1/3 20/30
第三周 130/300 1/4 20/50
第五周 130/430 2/6 25/75
原文地址:https://www.cnblogs.com/5321z/p/5968007.html