• 2017-2018-1 20155338 《信息安全系统设计基础》第5周学习总结


    2017-2018-1 20155338 《信息安全系统设计基础》第5周学习总结

    教材学习内容总结

    算术和逻辑操作

    leal将有效地址写入到目的操作数,目的操作数必须是一个寄存器。

    一元操作:

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

    二元操作:

    第二个操作数既是源又是目的,两个操作数不能同时是存储器。

    移位:

    先给出位移量,然后是位移的数值,可进行算数和逻辑右移。移位量可以是立即数或单字节寄存器元素%cl中的数。

    有符号除法指令idivl,商在寄存器%eax,余数在%edx。
    无符号除法使用divl指令,通常将寄存器%edx设置为0。

    控制

    条件码:

    描述最近的算数或者逻辑操作的属性,可以检测这些寄存器来执行条件分支指令。

    CF:

    进位标志,最近操作使高位产生进位,用来检测无符号操作数的溢出

    ZF:

    零标志,最近操作得出的结果为0

    SF:

    符号标志,最近操作得到的结果为负数

    OF:

    溢出标志,最近操作导致一个补码溢出-正溢出或负溢出。

    leal不改变任何条件码

    CMP和SUB指令行为一样,只是CMP只设置条件码而不更新目标寄存器。

    访问条件码的方式:

    根据条件码的某个组合,将一个字节设置成0或1;可以条件跳转到程序某个其他的部分;有条件的传送数据。

    SET指令根据计算t=a-b的设置条件码

    jmp指令是无条件跳转,可以是直接跳转,即跳转目标是作为指令的一部分编码;也可以是间接跳转,即跳转目标从寄存器或存储器位置中读出的,写法是‘*’后面跟一个操作数指示符。

    条件跳转只能是直接跳转的。

    当执行PC相关的寻址时,程序计数器的值是跳转指令后面那条指令的地址,而不是跳转指令本身的地址。

    过程

    数据传递、局部变量的分配和释放通过操纵程序栈来实现。

    为单个过程分配的栈叫做栈帧,寄存器%ebp为帧指针,而寄存器指针%esp为栈指针,程序执行时栈指针移动,大多数信息的访问都是相对于帧指针。

    call指令有一个目标,即指明被调用过程起始的指令地址,效果是将返回地址入栈,并跳转到被调用过程的起始处。

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

    代码调试中的问题和解决过程

    gcc -S XXX.c

    得到C语言编译产生的汇编码

    gcc -c XXX.c

    编译该代码

    objdump -d XXX.o

    反汇编

    代码托管

    本周结对学习情况

    20155307

    结对学习内容:

    反汇编

    过程

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 2000行 15篇 200小时
    第一周 150/150 1/1 17/17
    第二周 70/220 1/2 12/29
    第三周 100/320 1/3 10/39
    第四周 100/420 1/4 10/59
    第五周 80/500 1/6 22/81
    • 计划学习时间:20小时

    • 实际学习时间:22小时

  • 相关阅读:
    Gates entitled as knight
    the next generation Office
    Beautiful songs
    一则比较搞笑的新闻:【人才】微软招募英才 机会不容错过
    About cmt lint tools
    Alpha's blog open !
    抱歉!
    新闻:IBM的新工具CHIPHOPPER! 一套能够极大扩展Linux应用范围的新工具、新资源和新软件
    读书笔记:Thinking in Java (一)
    The best coders are:/什么是最牛的程序员
  • 原文地址:https://www.cnblogs.com/Hdywan/p/7712227.html
Copyright © 2020-2023  润新知