zoukankan      html  css  js  c++  java
  • 20135328-信息安全系统设计基础第五周学习总结(程序的机器级表示)

    第五周(10.05-10.11):
    学习计时:共小时
    读书:
    代码:
    作业:
    博客:
    一、学习目标

    1. 理解逆向的概念以及
    2. 掌握X86汇编基础,能够阅读(反)汇编代码
    3. 了解ISA(指令集体系结构)
    4. 理解函数调用栈帧的概念,并能用GDB进行调试
      二、学习资源
    5. 教材:第三章《程序的机器级表示》,详细学习指导见这:重点是3.7,3.11
    6. 课程资料:https://www.shiyanlou.com/courses/413 实验四,课程邀请码:W7FQKW4Y
    7. 教材中代码运行、思考一下,读代码的学习方法见这。
      三、学习方法
    8. 进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。
    9. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
    10. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
    11. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“学号-信息安全系统设计基础第五周学习总结”

    四、学习任务

    1. 阅读教材,完成课后练习(书中有参考答案)
      3.1-3.7中练习,重点:3.1,3.3,3.5,3.6,3.9,3.14,3.15,3.16,3.22,3.23,3.27,3.29,3.30,3.33,3.34
    2. 考核:练习题把数据变换一下
    3. 实验:需要动手的到实验楼中练习一下
    4. 深化、实践题目,额外加分

    五、后续学习预告(可选):
    第四章《处理器体系结构》
    六、学习过程
    (提示:此处由学生填写,学习过程,学习笔记,代码编译,运行结果,思考等)
    3.1历史观点

    Intel处理器俗称X86,经历了长期的、不断进化的发展过程。
    8086—〉Core i7(处理器版本后向兼容)
    3.2程序编码
    编译代码:gcc =O1 -o p p1.c p2.c
    实际上gcc命令调用了一系列程序,将源代码转化成可执行代码。

    3.2.1机器级代码

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

    3.3数据格式
    char b-字节
    short w-字
    int l-双字

    数据传送指令:
    MOV S,D

    movb 传送字节
    movw 传送字
    movl 传送双字
    (上述gcc生成的汇编代码指令都有一个字符后缀,表明操作数的大小)

    3.5算术和逻辑操作
    四种整数操作:

    加载有效地址:实际是将有效地址写入目的操作数,目的操作数必须是寄存器。

    一元操作:只有一个操作数,可以是寄存器也可是存储器位置。

    • INC 加1
    • DEC 减1
    • NEG 取负
    • NOT 取补
      二元操作:源操作数是第一个,可以是立即数、寄存器、存储器 目的操作数是第二个,可以是寄存器、存储器 两个不能同时为存储器。
    • ADD 加
    • SUB 减
    • IMUL 乘
    • XOR 异或
    • OR 或
    • AND 与
      使用规则: 第二个操作数 操作符 第一个操作数
      移位:了解源操作数和目的操作数
    • SAL 左移
    • SHL 左移(等同于SAL)
    • SAR 算术右移
    • SHR 逻辑右移
      源操作数:移位量——立即数或CL
      目的操作数:要移位的数值——寄存器或存储器

    3.6控制
    翻译条件分支
    将条件表达式和语句从c语言翻译成机器语言,最常用的方式就是结合有条件和无条件跳转。
    do循环
    do

    body-statement
    
    while(test-expr);
    

    loop:

        body-statement
    
        t = test-expr;
    
        if(t)
    
               goto loop;
    

    while循环
    while (test-expr)

        body-statement
    

    if(!test-expr)

        goto done;
    

    do

               body-statement
    
               while(test-expr);
    

    for循环
    for(init-expr;test-expr;update-expr)
    body-satament

    翻译条件分支
    将条件表达式和语句从c语言翻译成机器语言,最常用的方式就是结合有条件和无条件跳转。

    1.寄存器的使用
    调用者——%eax、%edx、%ecx
    被调用者——%ebx%esi%edi

    寄存器%ebp-帧指针

    寄存器%esp-栈指针
    七、遇到的问题及解决
    感觉跟上个学期的汇编联系很大,但汇编没学好.....现在看这个比较难过

    八、其他
    (提示:此处由学生填写,灵感,领悟等)

  • 相关阅读:
    http强转https websocket
    apache http添加证书转成https
    insert into
    分割字符串和截取字符串:split 和substring
    java实现http请求
    Oracle 中 decode 函数用法
    LeetCode:154. 寻找旋转排序数组中的最小值 II
    LeetCode:153. 寻找旋转排序数组中的最小值
    LeetCode:151. 翻转字符串里的单词
    LeetCode:145. 二叉树的后序遍历
  • 原文地址:https://www.cnblogs.com/cdcode/p/4864591.html
Copyright © 2011-2022 走看看