zoukankan      html  css  js  c++  java
  • 《深入理解计算机系统(第三版)》第一章

    1.知识总结(主要对新知识)

    (1)计算机提供不同层次的抽象表示,来隐藏实际实现的复杂性

    • 文件是对I/O设备的抽象表示
    • 虚拟存储器是对主存和磁盘I/O设备的抽象表示
    • 进程是对处理器、主存和I/O设备的抽象表示

    (2)程序员必须知道编译系统是如何工作的原因:

    • 优化程序性能:知其原理,才可优化。
    • 理解连接时出现的错误
    • 避免安全漏洞:缓冲区溢出错误。

    (3)运行hello程序

    • shell 上输入”./hello”后,回车,shell逐一读入字符串到寄存器,之后把字符串存入内存中
    • shell 加载hello程序从磁盘到内存(最开始hello是放在磁盘上的)
    • hello加载完毕后,CPU执行hello程序的main程序的机器指令。将主存中要打印的”hello, world ”,从内存加载到寄存器,再从寄存器复制到显示设备,最终显示在屏幕上

    (4)并发是一个通用的概念,指一个同时具有多个活动的系统;并行指的是用并发使一个系统运行的更快

    (5)意识到高速缓存的存在,可以利用高速缓存将程序的性能提高一个数量级。

    (6)虚拟内存为每个进程提供一个假象,即每个进程都在独占的使用主存。每个进程看到的是一致的存储器,称为虚拟地址空间。进程的虚拟地址空间从下往上(从小到大)依次放的是:

    • 程序代码和数据:对于所有的进程来说,代码是从同一固定地址开始,紧接着是C全局变量相对应的数据位置。
    • 运行时堆:代码和数据区是在进程一开始运行时就被规定了大小,而当调用如malloc和free这样的标准库函数时,堆可以在程序运行时动态的扩展和收缩。
    • 共享库:存储C标准库和数学库等的代码和数据。
    • 用户栈:实现函数调用。
    • 内核虚拟内存:不允许应用程序读写,或者直接调用内核代码定义的函数。

    2.问题思考解决

    缓冲区溢出错误如何造成免安全漏洞?

    参考缓冲区溢出攻击原理分析,结合学习过的栈帧变化,知道了缓冲区溢出攻击会通过某种方式修改eip的值,让其指向恶意代码。当buf变量发生溢出时会往高地址空间覆盖,先是覆盖本函数的其它局部变量,然后是调用函数的ebp,再次是eip,最后是调用函数的栈空间。如果读取的文件内容覆盖掉eip,就可以修改程序的执行路径(传入一个超长的带有shellcode的字符缓冲,覆盖栈中的EIP值,这样当函数执行完成返回后就会返回到有shellcode的地方,执行恶意代码)。

  • 相关阅读:
    PDA智能程序访问WebService,报告“未能建立与网络的连接”
    VS2008中开发智能设备程序的一些总结收藏
    Error: The INF file contains Unicode characters that could not be converted correctly
    在vs2008工程中制作cab包
    linux专题三之如何悄悄破解root密码(以redhat7.2x64为例)
    linux专题一之文件描述符、重定向、管道符、tee命令
    linux的计划
    如何安装RHEL7.2x64 即红帽7.2虚拟机?
    快速排序及查找第K个大的数。
    来来来,做道题,一起防老年痴呆
  • 原文地址:https://www.cnblogs.com/Jspo/p/7898976.html
Copyright © 2011-2022 走看看