• 20145217《信息安全系统设计基础》第5周学习总结(1)


    20145217《信息安全系统设计基础》第5周学习总结(1)

    教材学习内容总结

    一、部分知识点

    • 3.1 X86寻址方式经历的三代

    1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
    2 8086的分段模式
    3 IA32的带保护模式的平坦模式

    • 3.2 程序编码

    1、ISA 指令集体系结构
    定义了处理器状态、指令的格式,以及每条指令对状态的影响

    2、
    处理器状态
    PC 程序计数器(%eip):指示将要执行的下一条指令在存储器中的位置。
    整数寄存器文件:包含8个命名的位置,分别存储32位的值。它们可以存储地址、证书数据,记录程序状态、保存临时数据。
    条件码寄存器:保存最近执行的算术或逻辑指令的状态信息。
    浮点寄存器:存放浮点数据

    获得汇编代码:gcc -S xxx.c -o xxx.s
    反汇编:objdump -d xxx
    在MAC OS中没有objdump指令,用等价功能的otool
    64位机器上想要得到32代码:gcc -m32 -S xxx.c

    二进制文件可以用od 命令查看,也可以用gdb的x命令查看。有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看:
    od code.o | more
    od code.o > code.txt

    • 3.3 数据格式

    b-字节
    w-字
    l-双字(注意:与之后出现的less(少、小、低)区别,此处是long)

    • 3.4 访问信息

    1、寄存器
    1.数据寄存器
    32位通用寄存器eax、ebx、ecx和edx。
    对低16位数据的存取,不会影响高16位的数据。
    可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器
    低16位寄存器分别命名为:ax、bx、cx和dx。
    *不能作为基址和变址寄存器来存放存储单元的地址。

    2.变址寄存器
    32位通用寄存器esi、edi,低16位对应先前CPU中的si和di。
    *用于存放存储单元在段内的偏移量,也可存储算术逻辑运算的操作数和运算结果。

    3.指针寄存器
    32位通用寄存器ebp和esp,低16位对应先前CPU中的sbp和sp。
    *用于存放堆栈内存储单元的偏移量,也可存储算术逻辑运算的操作数和运算结果。

    4.指令指针寄存器
    eip、ip
    *存放下次将要执行的指令在代码段的偏移量。

    二、附

    • 1、寄存器

    8位寄存器有: AH、AL、BH、BL、CH、CL、DH和DL等;
    16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;
    32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
    内存中的变量存储的是其偏移地址

    • 2、寻址方式

    操作数:立即数($9)、寄存器(%eax)、存储器
    有效地址=立即数+基址寄存器的值+变址寄存器的值*比例因子

    区别各种寻址方式时,注意各自的特点。(参考:http://www.cnblogs.com/satng/archive/2010/01/15/2138180.html)
    只有一个常量,是立即(数)寻址方式;
    只有一个寄存器名,是寄存器寻址方式;
    其他则是存储器寻址方式。
    用中括号括起一个常量是直接寻址方式;
    用中括号括起一个寄存器名,是寄存器间接寻址方式;
    用中括号括起一个寄存器名和一个常量是寄存器相对寻址方式;
    用中括号括起两个寄存器名是基址变址寻址方式;
    用中括号括起两个寄存器名和一个常量是相对基址变址寻址方式。

    • 3、指令

    1.数据传送指令
    MOV 传送字或字节.
    MOVS 先符号扩展,再传送.
    MOVZ 先零扩展,再传送.
    *源操作数:立即数,存储在寄存器中或者在存储器中
    目的操作数:寄存器、存储器地址。

    PUSH 把字压入堆栈.
    POP 把字弹出堆栈.
    栈顶-此端插入和删除元素。
    栈顶元素的地址是所有栈中元素地址中最低的。
    栈指针%esp保存着栈顶元素的地址。
    压栈——指针先减,数据再入
    弹栈——数据先出,指针再加

    2.目的地址传送指令
    leal 加载有效地址。
    从存储器读数据到寄存器,将有效地址写入目的操作数。
    目的操作数必须是一个寄存器。
    3.算术、逻辑运算指令
    一元操作:操作数可以是:寄存器、存储器位置

    INC 加 1.
    DEC 减 1.
    NEG 取负
    NOT 取补
    二元操作:第一个操作数可以是:立即数、寄存器、存储器位置。第二个数可以是:寄存器、存储器位置。(不能同时是存储器位置)

    ADD 加法.
    SUB 减法.
    IMUL 整数乘法.
    IDIV 整数除法.

    AND 与运算.
    or 或运算.
    XOR 异或运算.
    移位操作:移位量:立即数,或者放在单字节寄存器元素%cl中。目的操作数可以是:寄存器、存储器位置

    SHL 逻辑左移.
    SAL 算术左移.(=SHL)
    SHR 逻辑右移.(高位补0)
    SAR 算术右移.(高位补符号)
    比较和测试:仅修改标志位,不回送结果
    

    CMP 比较.(两操作数作减法).
    TEST 测试.(两操作数作与运算).
    条件码寄存器

    CF:进位标志
    ZF:零标志
    SF:符号标志
    OF:溢出标志
    

    CMP 比较.(两操作数作减法,右操作数减左操作数).
    TEST 测试.(两操作数作与运算).

    • 比较和测试仅修改标志位,不回送结果

    条件码寄存器不能直接读取,有三种方法:
    set指令:根据条件码,设置一个字节。
    jump指令:根据条件码进行跳转,即控制的条件转移。
    cmov条件传送指令:根据条件码决定是否进行mov操作
    *这些指令判断条件是否满足,是根据条件码的组合决定的。
    *sete (e:equal) setl (l:less与之前的long进行区别)

    三、部分学习截图

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第二周 50/50 1/3 12/25
    第三周 150/200 1/4 12/37

    参考资料

  • 相关阅读:
    es6字符串扩展(+模板字符串拼接)
    MySQL-技术专区-mysql数据库权限管理
    MySQL-技术专区-数据库权限管理
    开源软件的盈利模式
    分布式-技术专区-Redis分布式锁实现-第二步
    分布式-技术专区-Redis分布式锁实现-第一步
    分布式-技术专区-Redis分布式锁原理实现
    JPA接口整理归纳方法规则
    备份整理-实用归纳
    Zookeeper-技术专区-运作流程分析介绍
  • 原文地址:https://www.cnblogs.com/jokebright/p/5957648.html
Copyright © 2020-2023  润新知