2018-2019-1 20165228 《信息安全系统设计基础》第三周学习总结

2018-2019-1 20165228 《信息安全系统设计基础》第三周学习总结

教材学习内容总结

程序的机器级表示:

计算机系统的两种重要抽象

  • ISA(Instruction set architecture):指令集体系结构,机器级程序的格式和行为。定义了处理器状态指令的格式,以及每条指令对状态的影响。
  • 机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字节数组。存储器系统实际表现是将多个硬件存储器和操作系统软件组合起来。

    汇编代码及其特点

  • 直接面向处理器的程序设计语言。编译器将C语言代码转化为处理器执行的基本指令,汇编语言非常接近于机器代码。
  • 特点:可读性相较于机器代码更好的文本格式表示

    X86-64指令

  • 指令长度:1到15字节不等
  • 指令格式:OPER [DEST [, SRC]] ;注释

    如何得到C语言代码的汇编代码

  • 运行GCC编译器产生一个汇编文件code.s
gcc -Og -S code.c
//-Og表示优化程度,比如-01表示使用第一级优化,优化的级别与编译时间和最终产生代码的形式都有关系。
  • 使用-c命令选项,GCC编译并汇编该代码得到code.o
gcc -c code.c
  • 目标代码:二进制形式,无法直接查看,机器实际执行的程序只是对一系列指令进行编码的字节序列。

    如何根据目标代码得到可读的内容

  • 使用反汇编器(disassembler),可根据目标代码产生一种类似于汇编代码的格式。
objdump -d code.o

处理器:

  • 程序处理器:只是下条将要执行的指令在存储器中的地址
  • 整数寄存器:包含16个命名的位置,分别存储64位值。可用来记录某些文件状态,也可用来保存临时值。
  • 条纹寄存器:保存最近执行的算数或逻辑指令的状态信息。
  • 浮点寄存器:一组向量寄存器可以存放一个或多个证书或浮点数值。

    处理器的通用目的寄存器

  • X86-64的中央处理单元(cpu)包含一组16个存储64位值的通用目的寄存器

    汇编指令

  • mov类指令:源操作数的值复制到目的操作数中。
  • movb 传送字节
  • movw 传送字
  • movvl 传送双字
  • movz 零扩展
  • 一元操作
  • INC 加一
  • DEC 减一
  • NEG 取负
  • NOT 取补
  • 二元操作
  • ADD 加
  • SUB 减
  • IMUL 乘
  • XOR 异或
  • OR 或
  • AND 与
  • 控制

条件码

 ```
 CF:进位标志

 ZF:零标志

 SF:符号标志

 OF:溢出标志
 ```

循环(while, for)

 C语言do-while循环:
  
     do
    body-statement
    while(test-expr);
 汇编实现形式:
 
     loop:
    body-statement
    t = test-expr;
    if(t)
        goto loop;

寻址方式

  • 立即数寻址:操作数在指令中直接给出,只能用于源操作数,数据长度应与目的操作数长度匹配。
  • 寄存器寻址:数放在CPU的内部寄存器中,源操作数与目的操作数长度应一致。
  • 存储器寻址:操作数存放在存储器中,指令中给出操作数的偏移地址信息。

    过程

  • 一组指定的参数和一个可选的返回值实现某种功能。
  • 形式:函数、方法、子例程、处理函数等。
  • 实现过程需要的机器级支持机制
  • 传递控制
  • 传递数据
  • 分配和释放内存

    分配和释放内存

  • 栈上的局部存储
  • 寄存器中的局部存储空间

    栈帧:过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。逻辑上讲,栈帧就是一个函数执行的黄精:函数参数、函数的局部变量、函数执行完后返回到哪里等等。

    延伸方式:栈是从高地址向低地址延伸。每个函数的每次调用都有自己独立的一个栈帧,即里面维持着所需要的各种信息。寄存器ebp指向当前的栈帧的地步(高地址),寄存器esp指向当前的栈帧顶部(低地址)。

    异质的数据结构

  • C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。
  • 结构的所有组成部分都存放在一段连续区域内,结构的指针就是结构第一个字节的地址。

    数据对齐

  • 对于大多数x86-64指令来说,保持数据对齐能够提高效率,但是它不会影响程序的行为。

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

  • 问题1:GDB调试问题“No source file named file.c. Make breakpoint pending on future shared library load?”和“没有符号表被读取。请使用”file” 命令”
  • 问题1解决方案:在编译的时候,没有加-g的选项,导致没有产生调试符号。

    代码托管

    学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 124/124 1/1 9/9

原文地址:https://www.cnblogs.com/cloud795/p/9786123.html

时间: 2024-10-29 07:50:13

2018-2019-1 20165228 《信息安全系统设计基础》第三周学习总结的相关文章

信息安全系统设计基础第三周学习总结

要点概括: 一.三种最重要的数字表示:    无符号数,有符号数(二进制补码),浮点数 从逆向考虑为什么产生漏洞: 结果太大不能表示时产生溢出,得到了负的结果.   二.信息存储 1.进制转换:以二进制作为桥梁. 2.字长:32位 64位 3.数据大小:单精度(4字节),双精度(8字节) 4.声明指针: 对于任何数据类型T,声明 T *p: 表明p是一个指针变量,指向一个类型为T的对象. 5.gcc –m32 可以在64位机上生成32位的代码. 6.寻址和字节顺序:    字节顺序是网络编程的基

20135223何伟钦—信息安全系统设计基础第三周学习总结

信息的表示和处理 2.0三种数字表示 无符号:编码基于传统的二进制表示法,表示大于或者等于零的数字. 补码:编码是表示有符号整数的最常见的方式,有 符号整数就是可以为正或者为负的数字. 浮点数:编码是表示实数的科学记数法 的以二为基数的版本. 溢出(overflow)的例子:使用 32 位来表示数据类型int,计算表达式200*300*400*500会得出结果 -884 901 888. 这违背了整数运算的特性,计算一组正数的乘积不应产生一个为负的结果. 2.1信息存储 机器级程序将存储器视为一

20135327郭皓——信息安全系统设计基础第三周学习总结

第2章 信息的表示和处理 三种重要的数字表现形式: 1. 无符号数:编码基于传统的二进制表示法,表示大于或等于零的数字. 2. 补码:编码是表示有符号整数的最常见方法,有符号整数就是可以为正或者是负的数字. 3. 浮点数:编码是表示实数的科学计数法的以二位基数的版本 2.1 信息储存 大多数计算机使用8位块,或者字节,作为最小的可寻址的储存器单位,而不是在储存器中访问单独的位. 虚拟储存器:机器级程序将储存器视为一个非常大的字节数组. 地址:储存器的每个字节的唯一的数字标识. 虚拟地址空间:所有

信息安全系统设计基础第三周学习总结 ---20135334 赵阳林

第2章 信息的表示和处理 三种最重要的数字表示: * 无符号 * 补码 * 浮点数 运算: * 整数运算 * 浮点运算 对比: 整数运算只能编码相对较小的范围,但是是精确的: 浮点运算可以编码一个较大的范围,但是是近似的:浮点运算不可结合. 注意:溢出——运算位数的限制 第一节 信息存储 计算机最小的可寻址的存储器单位——字节 一个字节的值域:00H-FFH 一.十六进制表示法 1. C表示法 以0x或0X开头的数字常量为十六进制 2. 进制转换 常用进制:二进制(B),十进制(D),八进制(O

20135210程涵——信息安全系统设计基础第三周学习总结

本次学习任务:仔细研读<深入理解计算机系统>第二章内容,掌握整数表示.浮点数表示及其运算 一.学习过程 三种重要的数字表现形式: 无符号数:编码基于传统的二进制表示法表示大于或等于零的数字. 补码:编码是表示有符号整数的最常见方法,可以是正或者是负的数字. 浮点数:编码是表示实数的科学计数法的以二位基数的版本 溢出:计算机的表示法是用有限数量的位来为一个数字编码,因此当结果太大就会导致某些运算溢出. 整数和浮点数会有不同的数学属性是因为处理数字表示有限性的方法不同. (整数是编码相对较小的数值

信息安全系统设计基础第三周学习总结—20135227黄晓妍

一.Vim编辑器 1.Vim的六种模式 2.Vim三种常用模式的使用方式,以及三者的切换.打开Vim即默认进入普通模式,按i进入插入模式,按esc从插入模式退出普通模式,再按:进入命令行模式. 普通模式下游标的移动 按键 说明 h 左 l 右(小写L) j 下 k 上 w 移动到下一个单词 b 移动到上一个单词 普通模式进入插入模式的方式 命令         说明 i        在当前光标处进行编辑 I        在行首插入 A       在行末插入 a       在光标后插入编辑

信息安全系统设计基础第三周学习总结-吕松鸿

第2章 信息的表示和处理 (一).三种重要的数字表示 无符号数:编码基于传统的二进制表示法(大于或者等于零的数字). 补码:编码是表示有符号整数的最常见方式(为正或者为负的数字). 浮点数:编码是表示实数的科学记数法的以二为基数的版本. 整数的表示虽然只能编码一个相对较小的数值范围,但是是精确的:而浮点数虽然可以编码一个较大的数值范围,但是这种表示是近似的表示. 大量的计算机安全漏洞都是由于计算机运算的微妙细节引发的. (二).信息存储 计算机最小的可寻址的存储器单位——字节 一个字节的值域:0

20135219洪韶武——信息安全系统设计基础第三周学习总结

学习过程总结 一.gcc 编译 使用C99特性时 gcc -std=c99 xxx.c 实验楼环境为64位,编译为32位机器码: gcc -m32 xxx.c 二.重点注意知识点 p20: 三种数字:无符号数.有符号数(2进制补码).浮点数,信息安全系同学从逆向角度考虑为什么会产生漏洞 p22: 进制转换,注意拿二进制作中间结果就好转了 p25: gcc -m32 可以在64位机上(比如实验楼的环境)生成32位的代码 p26: 字节顺序是网络编程的基础,记住小端是“高对高.低对低”,大端与之相反

2018-2019-1 20165228 苏祚堃《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165228 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 GCC编译: 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp 编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl 汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as 链 接:gcc hello.o –o hello ;gcc -o 调用ld 带head.h的头文件编译:需要使用"-I +

2018-2019-1 20165228 《信息安全系统设计基础》第二周学习总结

2018-2019-1 20165228 <信息安全系统设计基础>第二周学习总结 教材学习内容总结 信息=位+上下文 无符号编码:基于传统的二进制表示法,表示大于等于零的数字 补码编码:表示有符号数证书最常见的方式,可表示或正或负的数字 浮点数编码:表示实数的科学计数法的以二为基数的版本 溢出:计算机的表示法是用有限数量的位来对一个数字编码,当结果太大以至不能表示时,某些运算就会溢出 信息的存储 1个字节为8位,大多数计算机将1个字节作为最小的可寻址的存储器单位. 机器级程序将存储器视为一个非