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


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

    教材学习内容总结

    3.1 历史观点

    ·X86寻址的三个时代:

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

    3.2 程序编码

    ·gcc编译器的编译选项:

    -01 第一级优化 (多作为学习工具);
    -02 第二级优化 (所得到的程序性能更优);
    提高优化级别会使最终程序运行得更快,但编译时间也要更长,用调试工具对代码进行调试会更加困难。
    

    ·源代码转化为可执行代码:

    C预处理器扩展源代码;(gcc -E hello.c -o hello.i)
    编译器产生汇编代码;(gcc -S hello.i -o hello.s)
    汇编器将汇编代码转换成二进制目标代码;(gcc -c hello.s -o hello.o)
    链接器将目标代码文件与现实库函数的代码合并,产生最终的课执行文件。(gcc hello.o -o hello)
    

    3.4访问信息

    ·操作数的三种类型:立即数、寄存器、存储器;
    ·MOV指令:将原操作数的值复制到目的操作数中;(不能够从存储器传送到存储器)

    3.5 算数和逻辑操作

    ·加载有效地址:leal的指令形式是从存储器读数据到寄存器。但该指令并不是从指定位置读入数据,而是将有效地址写入到目的操作数。
    ·一元操作:

    INC(自增1)
    DEC(自减1)
    NEG(取负)
    NOT(取补)
    

    ·二元操作:

    ADD(加)
    SUB(减)
    IMUL(乘)
    XOR(异或)
    OR(或)
    AND(与)
    

    ·移位操作:

    SAL(左移)
    SHL(左移)
    SAR(算数右移)
    SHR(逻辑右移)
    

    3.6 控制

    ·两种实现条件行为的低级机制:测试数据,然后根据测试的结果来改变控制流或者数据流;
    ·jump指令可以改变一组机器代码指令的执行顺序;
    ·leal指令不会改变任何条件码;
    ·CMPTEST只设置条件码而不改变任何其他寄存器;

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

    我安装的是64位的Ubuntu程序,但他并不能使用-m32生成32位文件:

    所生成的32位文件里面是空的:

    系统也不支持-01的编译选项,使用gcc -S code.c指令生成文件如下:

    二进制的机器码使用od打开:


    反汇编的结果:



    本周代码托管链接

    https://git.oschina.net/Kevin_s/Linux_C.git

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目 标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第四周 300/1300 2/9 30/90

    参考资料

  • 相关阅读:
    k8s存储(部署理论)
    DELL R720针对磁盘故障面板信息误报解决
    ovirt平台新建kvm操作
    宿主机计划任务执行docker相关命令
    网企-11-12
    洛谷-P1164 小A点菜
    洛谷-P1060 开心的金明
    洛谷-P1305 新二叉树
    洛谷-P1030 求先序排列
    洛谷-P1087 FBI树
  • 原文地址:https://www.cnblogs.com/20145224kevs/p/5967157.html
Copyright © 2020-2023  润新知