zoukankan      html  css  js  c++  java
  • 20145234黄斐《信息安全系统升级系统》第五周学习总结

    教材内容概述

    3.1 历史观点

    X86 寻址方式经历三代: 
    1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全
    2 8086的分段模式
    3 IA32的带保护模式的平坦模式

    3.2 程序编码

    计算机系统使用了多种不同的抽象,对机器级编程来说,两种抽象尤为重要:

    机器级程序的格式和行为,定义为“指令集体系结构”--“ISA”

    机器级程序使用的存储器地址是虚拟地址

    可见的处理器状态

    程序计数器 指示将要执行的下一条指令在存储器中的位置

    整数寄存器文件包含8个命名的位置,分别存储32位的值

    条件码寄存器保存最近执行的算术或逻辑指令的状态信息

    程序存储器包含:程序的可执行机器代码,操作系统需要的一些信息,运行时栈,存储器块等

    gcc -S xxx.c -o xxx.s 获得汇编代码,也可以用objdump -d xxx 反汇编————64位机器上想要得到32代码:gcc -m32 -S xxx.c

    MAC OS中没有objdump, 有个基本等价的命令otool 

    Ubuntu中 gcc -S code.c (不带-O1) 产生的代码更接近教材中代码(删除"."开头的语句)

     二进制文件可以用od 命令查看,也可以用gdb的x命令查看。

    有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看

    od code.o | more

    od code.o > code.txt

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

    3.3 数据格式

    3.4 访问信息

    IA32中央处理单元的一组8个存储32为值的寄存器:%eax %ecx %edx %ebx %esi %edi %esp %ebp

    • 寄存器中 esi edi可以用来操纵数组,esp ebp用来操纵栈帧

    操作数:

    立即数:$+标准C表示法表示的整数

    寄存器:表示某个寄存器的内容

    存储器:根据计算出来的地址(有效地址)访问某个存储器引用

    有效地址的计算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

    MOV相当于C语言的赋值”=“,注意ATT格式中的方向, 另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。能区分MOV,MOVS,MOVZ,掌握push,pop

    栈帧与push pop; 注意栈顶元素的地址是所有栈中元素地址中最低的。

    指针就是地址;局部变量保存在寄存器中。

    3.5 算数和逻辑操作

    加载有效地址 指令leal实际上是movl指令的变形,指令形式是从存储器读数据到寄存器,然而没有用到存储器

    一元操作 只有一个操作数,既是源又是目的。操作数可以使寄存器也可以是存储器位置

    二元操作 两个操作数,第二个操作数既是源又是目的。第一个是源操作数,第二个是目的操作数。两者不能同为存储器位置

    移位 先给出移位量,然后给出要移位的数值。它可以进行算数和逻辑右移

    3.6 控制

    条件码:CF——进位 ZF——零 SF——符号标志 OF——溢出

    跳转指令:jmp 使执行程序时切换到程序中一个全新的位置。jmp *%eax 用%eax中的值为跳转目标 jmp *(%eax) 以%eax中的值为读地址,从存储器中读出跳转目标

    循环指令:详见课本p132-145

    3.7 过程

    过程调用

    进入时为过程的局部变量分配空间

    将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。

    退出时释放这些空间。

    栈帧结构

     IA32程序用程序栈来支持过程调用。

     机器用栈来传递过程参数、存储返回信息、保存寄存器,以及本地存储。

    转译控制

    (1)call指令

    目标是指明被调用过程起始的指令地址

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

    (2)ret指令

    从栈中弹出地址,并跳转到这个位置。

    函数返回值存在%eax中

    习题

    尚在上传中

     

  • 相关阅读:
    Razor中@:和text
    Razor返回HTML字符串
    EPPlus使用
    ASP.NET MVC使用AllowAnonymous特性跳过授权验证
    下拉框获取json文件的数据
    SpringBoot 监听机制
    MybatisPlus Warpper实现复杂查询
    整合MybatisPlus心得
    MybatisPlus性能分析插件
    MybatisPlus物理删除、逻辑删除
  • 原文地址:https://www.cnblogs.com/taigenzhenjun/p/5967655.html
Copyright © 2011-2022 走看看