zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155223 《信息安全系统设计基础》第5周学习总结

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

    教材学习内容总结

    逆向工程

    正常的设计过程是设计人员在脑中构思出产品结构、性能和大致的技术参数,然后在细节设计中完善各类数据模型,最后将模型导入总设计中以完成产品设计。而逆向工程则是先获取已有的成品,然后通过反向分析推导出完成该产品所需的大部分数据。在计算机编程当中,使用逆向工程通常指的是对已有软件进行反汇编(反向开大日代码……),通过汇编代码来得到目标软件的设计思路及实现方式。

    指令集体系结构

    ISA(指令集体系结构)包含以下四种: 复杂指令集运算(Complex Instruction Set Computing,CISC);精简指令集运算(Reduced Instruction Set Computing,RISC) ;显式并行指令集运算(Explicitly Parallel Instruction Computing,EPIC);超长指令字指令集运算(VLIW)。其中CISC、EPIC能在64位操作系统中使用;RISC不能在Windows系统下运行;VLIW是一种将多条指令缩编到一个指令字上的指令集运算,能够有效利用计算机CPU。

    函数调用栈帧的变化

    某份被反汇编的代码:

    #include<stdio.h>  
    int fun(int x, int y)  
    {  
        int c = 0xcccccccc;  
        return c;  
    }  
    int main()  
    {  
        int a = 0xaaaaaaaa;  
        int b = 0xbbbbbbbb;  
        int ret = fun(a, b);  
        printf("You should runing here!
    ");  
        return 0;  
    } 
    

    • 先是主函数的堆栈基址入栈,以保存之前任务的信息。
    • 然后将主函数的栈顶指针的值赋给堆栈基址,作为新的基址(即被调用的函数fun()的栈底)。
    • 然后在这个基址(fun()函数的栈底)上开辟(一般用sub命令)相应的空间用作被调用者fun()函数的栈空间。
    • 函数fun()返回后,从当前栈帧的栈底即恢复为调用者函数main()的栈顶,使栈顶恢复函数fun()被调用前的位置,然后调用者main()再从恢复后的栈顶弹出之前的ebp值(可以这么做是因为这个值在函数调用前前一步被压入栈”main():retaddr”)。这样,堆栈基址和栈顶指针就都恢复了调用函数fun()之前的位置,也就是栈恢复函数fun()调用前的状态。

    浮点机器代码

    与C语言、Java不同,汇编语言只有一种浮点数float。AVX2指令集比原来的代码,更能提升CPU的浮点数运算能力。AVX的浮点数运算代码与汇编语言的整数运算代码相似,都使用一组寄存器保存和操作数值,也用同一组寄存器来传递函数参数。

    教材学习中的问题和解决过程

    • 问题1:ISA体系下有四种指令集运算,其中2种明确只能在64位机器上使用,VLIW是将多条代码缩编到一个指令字上,并没有明确说明适用于32位机或64位机或两者皆可。那么32位机的ISA是怎么样的?
    • 问题1解决方案:已经上网寻找答案,但是网上并没有直接给出32位机的ISA体系结构。现在的情况是:ISA体系下的四种指令集中有两种(EPIC和CISC)是不可能在我的32位机使用的,VLIW尚不清楚,只剩RISC一种我是确定能使用的(在虚拟机)。
    • 问题2:AVX2浮点数计算基于x86-64CPU,然而我的笔记本确定是台32位机,能不能用我心里没底。
    • 问题2解决方案:虚拟机是64位的,就可能用得上AVX2的浮点代码。

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

    • 问题1:反汇编出来的代码看不太懂。
    • 问题1解决方案:下载一份汇编代码汇总,看到一条代码就翻汇总,就不信看不懂!

    代码托管

    上周考试错题总结

    活动在博客发布前活动还没有结束,查不到错题。

    其他(感悟、思考等,可选)

    有谁知道哪里或那位高人可以魔改笔记本电脑的吗?我想把

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    第一周 31/31 1/1 20/20
    第三周 24/55 2/3 24/44 知道浮点数怎么储存的
    第四周 177/328 2/5 17/61 现在我的C语言程序也会在Linux命令行下使用了:*)
    第五周 54/382 2/7 18/79 复习一遍汇编语言

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    • 计划学习时间:15小时

    • 实际学习时间:>=18小时

    • 改进情况:用电脑解决问题的时间延长。

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    C盘与D盘中间有个恢复分区,导致C盘不能扩展卷解决
    Win下,QT控制台无输出解决
    QT与ECharts交互,绘制曲线图
    博客园好看的自定义主题
    Qt5之控件在初始化时就触发了槽函数的问题解决方案
    使用QCustomPlot,跟随鼠标动态显示线上点的值
    QCustomPlot下setTickLabelType()函数在新版本被移除如何解决
    记一次QT使用QAxWidget打开.html文件调用显示离线百度地图不能缩放,自定义图片不能显示解决方法
    使用QPainter绘制汽车仪表盘,动态显示
    QT下使用百度地图js,发送角度值给js使小车根据角度值调整车头方向
  • 原文地址:https://www.cnblogs.com/battlefieldheros/p/7705963.html
Copyright © 2011-2022 走看看