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


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

    教材学习内容总结

    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

    访问信息

    三种操作数:
    立即数:常数值。表示为$c标准表示的整数。
    寄存器:表示某个寄存器的内容。
    存储器:根据计算出来的地址访问某个存储器位置
    数据传送指令
    栈的特点
    a、 遵循“后进先出”的原则
    b、 push压栈,pop出栈
    c、 栈顶:总是从这端插入和删除元素
    d、 栈顶元素的地址是最低的
    e、 栈指针%esp保存着栈顶元素的地址
    3、数据传送示例
    局部变量通常保存在寄存器中;
    寄存器访问比存储器访问要快的多。

    二进制文件用od命令查看
    ·ATT与Intel汇编代码格式区别:
    Intel代码省略了指示大小的后缀
    Intel代码省略了寄存器前面的‘%’符号
    Intel代码用不同的方式来描述存储器中位置
    在带有多个操作数的指令情况下,列出操作数的顺序相反

    ·栈:遵循“后进先出”的原则
    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 打印当前可访问的局部变量的信息。

    打印调用堆栈
    backtrace 打印全部栈帧的简要信息,按Ctrl-c可终止打印。
    backtrace n 打印最内层的n个栈帧的简要信息。
    backtrace -n 打印最外层的n个栈帧的简要信息。
    backtrace full 打印全部栈帧的详细信息。
    backtrace full n 打印最内层的n个栈帧的详细信息。
    backtrace full -n 打印最外层的n个栈帧的详细信息。

    数据格式

    过程调用:

    进入,为过程的局部变量分配空间
    将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。
    退出,释放这些空间。

    IA32程序用程序栈来支持过程调用。注意:栈是向低地址增长的。
    栈帧结构:用来传递参数、储存返回信息、保存寄存器、以及本地存储
    call/ret; 函数返回值存在%eax中
    leave指令可以使栈做好返回的准备
    程序寄存器是唯一能被所有过程共享的资源。

    转移控制
    call
    call指令和转移指令相似,同样分直接和间接,直接调用的目标是标号,间接调用的目标是*后面跟一个操作数指示符,和JMP一样。
    call指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是还在程序中紧跟在call后面的那条指令的地址。
    ret
    ret指从栈中弹出地址,并跳转到这个位置。
    在上学期的汇编语言学习中,call和ret常被用来进行子函数、子模块的调用。

    课后练习截图


    编辑代码


    将代码转换为汇编语言并查看


    将含有代码中以"."开头的编译器指令删除

    课后作业中的问题和解决过程

    如果在c文件中输入头文件#include<stdio.h>则无法转换。。

    本周代码托管截图

    参考资料

  • 相关阅读:
    用OLEDB读取EXCEL时,单元格内容长度超过255被截断
    jquery对属性和特性的操作
    yum报[Errno 256] No more mirrors to try
    c语言:计算数组长度
    递归之100.相同的树
    1160.Find Words That Can Be Formed By Characters
    892.surface area of 3D shapes
    递归之24&206(链表)
    C++ private
    Dell 7559 安装黑苹果 Mojave14.15.6
  • 原文地址:https://www.cnblogs.com/pigeondandelion/p/5967685.html
Copyright © 2020-2023  润新知