zoukankan      html  css  js  c++  java
  • 20145317《信息安全系统设计基础》第五周学习总结2

    20145317《信息安全系统设计基础》第五周学习总结2

    教材学习内容总结

    X86 寻址方式经历三代:

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

    程序编程

    1、代码含义

    gcc -01 -o p p1.c
    • -01 表示使用第一级优化。优化的级别与编译时间和最终产生代码的形式都有关系,一般认为第二级优化-02 是较好的选择。

    • -o 表示将p1.c编译后的可执行文件命名为p

    2、机器级编程的两种抽象

    • 指令集结构ISA

    是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响。

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

    看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来。

    执行汇编命令:gcc –s xxx.c –o xxx.s
    反汇编命令:objdump –d xxx 
    64位处理器得到32代码的命令:gcc –m32 –s xxx.c

    访问信息

    1、三种操作数:

    立即数:常数值。表示为$c标准表示的整数。
    寄存器:表示某个寄存器的内容。
    存储器:根据计算出来的地址访问某个存储器位置

    2、数据传送指令

    • 栈的特点

      a、 遵循“后进先出”的原则
      b、 push压栈,pop出栈
      c、 栈顶:总是从这端插入和删除元素
      d、 栈顶元素的地址是最低的
      e、 栈指针%esp保存着栈顶元素的地址

    3、数据传送示例

    局部变量通常保存在寄存器中;
    寄存器访问比存储器访问要快的多。

    1.在栈帧之间切换

    frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息。

    up n 向上回退n个栈帧(更外层),n默认为1.

    down n 向下前进n个栈帧(更内层),n默认为1.

    2.打印栈帧信息(不移动栈帧)

    frame 打印当前栈帧的简要信息。

    info frame 打印当前栈帧的详细信息。

    info frame args 打印指定栈帧的详细信息。

    info args 打印函数参数信息。

    info locals 打印当前可访问的局部变量的信息。

    3.打印调用堆栈

    backtrace 打印全部栈帧的简要信息,按Ctrl-c可终止打印。

    backtrace n 打印最内层的n个栈帧的简要信息。

    backtrace -n 打印最外层的n个栈帧的简要信息。

    backtrace full 打印全部栈帧的详细信息。

    backtrace full n 打印最内层的n个栈帧的详细信息。

    backtrace full -n 打印最外层的n个栈帧的详细信息。

    gdb调试

    课后作业中的问题

    1、P113练习3.1刚开始看题就晕了,很多操作数搞混了,仔细看了表格后,明白了:$Imm是立即数,Imm是存储器位置,Ea是寄存器,(Ea)是存储器位置;此外,比例因子只和变址寄存器的值相乘,最后总结答案如下:

    Ox100
    OxAB
    Ox108
    OxFF
    OxAB(和第二个等价)
    Ox11
    Ox13
    OxFF
    Ox11

    2、P155练习3.32题不会做,反复阅读P153~P154后,发现漏看了返回值放在%eax寄存器中这句话,很关键,解答思路如下:

    1、代码最后两行:
    subl %eax,%edx
    movl %edx,%eax
    以及return x-c,可确定:%edx为x,%eax为c,注意到有后缀“l”,所以c和x为long int型。
    2、看前两行,movsbl、movl命令说明%edx、%eax为双字,第三行代码明显是*p=d,所以,%edx为d,%eax为p,全部为long int型。
    3、完整c代码如下:
    long int fun(long int d,long int p)
    {
        *p=d;
        long int c=p;
        long int x=d;
        return x-c
        }
     

    本周代码托管截图

    https://git.oschina.net/717py/py-20145317/tree/master

    学习进度条

     代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
    目标 5000行 30篇 400小时  
    第一周 200/200 1/2 20/20  
    第二周 300/500 1/3 18/38  
    第三周 200/1000 1/4 22/60  
    第五周 200/1300 1/5 20/80  

    参考资料

     
  • 相关阅读:
    VTK 9.0.1 vtkContextDevice2D 问题
    VTK 中文
    VTK 剪切
    VTK Color Map
    VTK Camera
    VTK Light
    VTK Read Source Object
    VTK Procedural Source Object
    Qt 布局开发问题记录
    Grafana 系列 (7):圖表是否可以数据追踪 (drill down)?(转)
  • 原文地址:https://www.cnblogs.com/5317p/p/5967738.html
Copyright © 2011-2022 走看看