当前正在向设备推出的补丁程序已经在最近几天内投放Nexus设备


【当前正在向设备推出的补丁程序已经在最近几天内投放Nexus设备】最近几周 , 媒体对Stagefright进行了大量关注 , Stagefright是Android操作系统的基于C ++的组件 , 负责播放各种不同的多媒体文件 。的怯场利用(本身中更详细地讨论本文中)从根本整数缓冲区溢出和下溢的结果 。虽然我们的前一篇文章对此进行了详细的讨论 , 但此后在撰写该文章后才浮出水面 , 但该补丁的弱点在于修复Stagefright 。是的 , 当前正在向设备推出的补丁程序已经在最近几天内投放Nexus设备 。所以现在我们需要另一个 。
不过 , 有一个(好消息)好消息–新补丁只是对源代码的一行更改 。您可以在AOSP gerrit上看到实际的补丁程序 , 该补丁程序为整数变量添加了另一个边界检查 , 以防止溢出 。
但是 , 不断出现“上溢和下溢”这个短语 , 并且本文旨在通过使用一些简单的示例来演示这些示例 , 您可以在家中学习这些问题的实际含义以及它们的工作方式 。我正在Linux上使用GCC C编译器(确切地说是5.2.0版)进行此操作 。如果愿意 , 您可以尝试在家中进行跟踪 , 并且这些结果在大多数系统上都可以重现 。如果不是 , 或者您不想启动Linux VM或实时CD , 请随时阅读-我将向您展示正在编译的代码以及运行时发生的事情 。
如果您懂一点C会很有帮助 , 但这不是必不可少的-我会讲解基础知识 。
让我们分配一些内存
几乎所有用C或C ++编写的软件(对于我们这里的目的 , 后者实际上是前者的扩展)的基础都是内存分配 。要存储东西 , 我们需要内存 。为此 , 我们声明一个变量 。这是为整数(整数)声明变量的示例:
我们在这里告诉编译器 , 我们将创建一个整数 。这表明我们需要多少内存(即足以容纳一个标准大小的整数) 。我们也将其命名为(a) , 以便稍后再参考 。最后 , 我们在其中设置一个值(5)–最后一步是可选的 。如果不这样做 , 我们将得到一个未初始化的整数 。那是其值不可预测的值 , 因为它恰好是该内存中的最后值 。让我们用一个快速程序尝试一下:
在这里 , 我们要制作几个数组 。数组只是一个类型的组的序列 。因此 , 在这种情况下 , 整数数组只是几个整数的序列 , 它们全部排成一行 , 并连续分配内存 。第一个(称为herpDerp)仅用于占用一些空间 , 以使结果更易于查看 。第二个数组称为myArray , 包含10个整数 。如果我们要在内存中查找myArray的第一个整数的地址 , 则可以每次向前移动1个地址 , 并查看数组中的下一个值 。实际上 , 这就是从“ printf”开始的行所做的–它将内容从变量打印到屏幕上 。在这里 , 我们将数组中每个整数的值打印到屏幕上 。

    推荐阅读