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

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

    教材学习内容总结

    三代X86 寻址方式:

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

    机器级编程的两种抽象

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

    ②机器级程序使用的存储器地址是虚拟地址,提供的储存器看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来

    代码编译

    编译产生汇编代码:gcc –s xxx.c 得到.s文件
    编译产生目标代码文件:gcc -o1 xxx.c 得到.o文件
    反汇编命令:objdump –d xxx
    直接编译64位处理器得到32代码的命令:gcc –S –o xxx.s xxx.c -m32

    数据格式

    几个寄存器

    三种操作数:

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

    操作数表格

    数据传送指令

    栈的特点

    1.后进先出的原则
    2.push压栈,pop出栈
    3.栈顶:总是从这端插入和删除元素
    4.栈顶元素的地址是最低的
    5.栈指针%esp保存着栈顶元素的地址

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

    算术和逻辑操作

    四组操作

    ①加载有效地址:将有效地址写入目的操作数,目的操作数必须是寄存器
    ②一元操作:只有一个操作数,既是源又是目的
    ③二元操作:源操作数是第一个,可以是立即数、寄存器、存储器,目的操作数是第二个,可以是寄存器、存储器,但两个不能同时为存储器
    ④移位:第一个是移位量,用单个字节编码且只允许0-31位的移位,可以是立即数或者放在单字节寄存器%cl中(算术右移SAR,填上符号位/逻辑右移SHR,填上0)目的操作数可以是一个寄存器或存储器

    特殊算术操作

    条件码:

    CF:进位标志
    ZF:零标志
    SF:符号标志
    OF:溢出标志

    条件码访问常用的三种方法:

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

    比较和测试指令

    SET指令

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

    jump指令

    直接跳转:后面跟标号作为跳转目标
    间接跳转:*后面跟一个操作数指示符

    •if-else
    •do-while
    •while
    •for
    •swith

    条件传送指令

    利用控制的条件转移,当条件满足时就,程序沿着一条执行路径进行,而当条件不满足时,就走另一路径。
    数据的条件转移方式

    call指令

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

    ret指令

    ret指从栈中弹出地址,并跳转到这个位置
    ret指令返回到call指令后的那条指令

    用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。
    最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针

    寄存器的使用惯例:

    %eax,%edx,%ecx 调用者保存寄存器
    %ebx,%esi,%edi 被调用者保存寄存器
    %ebp,%esp 保持寄存器

    gdb

    使用流程

    1)进入GDB  #gdb test

      test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。

    2)查看源码  (gdb) l

      源码会进行行号提示。

      如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。或者:使用断点或单步运行,到某个函数处使用s进入这个函数。

    3)设置断点  (gdb) b 6

      这样会在运行到源码第6行时停止,可以查看变量的值、堆栈情况等;这个行号是gdb的行号。

    4)查看断点处情况  (gdb) info b

      可以键入"info b"来查看断点处情况,可以设置多个断点;

    5)运行代码  (gdb) r

    6)显示变量值  (gdb) p n

      在程序暂停时,键入"p 变量名"(print)即可;

      GDB在显示变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"$N",而无需写冗长的变量名;

    7)观察变量  (gdb) watch n

    在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;

    8)单步运行  (gdb) n

    9)程序继续运行  (gdb) c

      使程序继续往下运行,直到再次遇到断点或程序结束;

    10)退出GDB  (gdb) q

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

    •实验楼实验

    编写代码

    编译文件生成汇编代码

    第一小问

    第二小问

    问题

    根据书上的步骤输入gdb prog出现这种情况,输入bt/frame/up/down显示NO STACK

    按下图方法即可

    代码托管问题(已在答疑论坛发布)

    以前输入git pull --rebase origin master后就可以成功上传,但这次出现了新的情况

    解决方法,可能是git pull -rebase用的太多了,不用新建文件夹,直接保存在上周代码的那个文件夹上传就可以了

    本周代码托管截图

    学习进度条

    博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 30篇 400小时
    第零周 1/1 20/20
    第一周 1/2 20/40
    第二周 1/3 20/60
    第三周 1/4 20/80
    第四周 0/4 00/80
    第五周 1/5 20/100
  • 相关阅读:
    Android下加载GIF图片
    拍照、相册及裁剪的终极实现(一)——拍照及裁剪功能实现
    阿里巴巴矢量库
    ActiveAndroid 管理数据库
    利用box-shadow制作loading图
    适用于移动端的地址选择器
    常用的不易记忆的css自定义代码
    关于js中一个对象当做参数传递是按值传递还是按引用传递的个人看法
    JavaScript之函数柯里化
    CSS3实现图片渐入效果
  • 原文地址:https://www.cnblogs.com/SJZGM10/p/5962559.html
Copyright © 2011-2022 走看看