zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException)
    linux命令之find和locate
    Java多线程3:Thread中的静态方法
    session的使用
    cookie的简单使用
    Spring 注入集合类型
    对Spring 容器管理事务支持的总结
    对SpringDAO层支持的总结
    为spring代理类设置属性值
    在spring中获取代理对象代理的目标对象工具类
  • 原文地址:https://www.cnblogs.com/5321z/p/5968007.html
Copyright © 2011-2022 走看看