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


    前言

    • 通过让编译器产生机器级程序的汇编表示,我们了解编译器和它的优化能力,以及机器代码、它的数据类型和它的指令集。当编写能有效映射到机器上的程序时,了解编译器的特性会有所帮助,一些高级语言会抽象隐藏有关程序的重要细节。理解程序是如何映射到机器上的,会让理解这些存储之间的区别容易一些。
    • 汇编语言与C代码差别很大,在汇编语言程序中,各种数据类型之间的差别很小。程序是以指令序列来表示的,每条指令都完成一个单独的操作。部分程序状态,如寄存器和运行时栈,对程序员来说是直接可见的。仅提供了低级操作来支持数据处理和程序控制。编译器必须用多条指令来产生和操作各种数据结构,来实现像条件、循环和过程这样的控制结构。

    知识简梳理

    机器级代码

    两种抽象

    指令集体系结构(ISA)

    定义了处理器状态、指令的格式,以及每条指令对状态的影响。

    虚拟地址

    机器级程序使用的存储器地址是虚拟地址,虚拟地址是多个硬件存储器和操作系统软件的抽象。虚拟地址空间由操作系统负责管理并进行相关翻译(抽象至物理的映射)。

    函数调用过程

    示意如图:

    用户栈

    栈向低地址方向增长,而栈指针%esp指向栈顶元素

    寄存器

    程序寄存器组:唯一能被所有函数共享的资源
    寄存器使用惯例:当过程P调用Q时,Q可以覆盖这些寄存器

    指令

    转译控制类

    call Label | 过程调用
    call | *Operand 过程调用
    leave | 为返回准备栈
    ret | 从过程调用中返回

    缓冲区溢出

    • 【推荐教学博客】
    • 由于C/C++语言没有数组越界检查机制,当向局部数组缓冲区里写入的数据超过为其分配的大小时,就会发生缓冲区溢出。
    • 实验

    实验

    抗缓冲区溢出攻击

    • 栈随机化
    • 栈破坏检测
    • 限制可执行代码区域

    知识详讲解

  • 相关阅读:
    REST API和微服务
    mormot报错: too many fields: 72>=64
    delphi操作blobfield
    cossacklabs acra 开源数据库安全套件
    dremio 对于iceberg 的操作支持
    数据应用访问控制的一些参考资料
    hasura graphqlengine 二进制运行方法说明
    openmetadata abac 实现简单说明
    hasura graphqlengine 源码构建问题
    dremio 22 发布
  • 原文地址:https://www.cnblogs.com/protectmonarch/p/8099698.html
Copyright © 2020-2023  润新知