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-栈指针
七、遇到的问题及解决
感觉跟上个学期的汇编联系很大,但汇编没学好.....现在看这个比较难过

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

posted on 2015-10-09 17:27  海的沉淀  阅读(564)  评论(2编辑  收藏  举报

导航