zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

一个潜在问题:内存分配操作中可能出现的整数溢出

内存 一个 操作 出现 可能 整数 分配 溢出
2023-09-14 09:10:45 时间

新的攻击向量

整数溢出正在逐渐成为一个新的安全攻击向量。
一个容易被开发者忽视的场景是在使用new[]进行内存分配的时候出现的整数溢出。

两个例子

考虑下面的代码,它可能会执行一个未经检查的隐式乘法操作。

 

如果你仔细研究一下上面代码生成的汇编代码的话,如下图所示:

 

请注意,在上面的汇编代码中,它并未检查与sizeof(int)的乘积是否溢出。别有用心者可以通过传递类似howmany = 0x40000001的值来诱导代码分配不足的内存。对于比较大型的数据结构,乘法溢出会以更快的速度发生。

下面我们再来看一个例子

 

该类还包含一个构造函数,因此分配它们的数组涉及两个步骤:分配内存,然后构造每个对象。 allocate_myclass函数的汇编代码如下:

 

此函数进行大小的未经检查的乘法操作,然后尝试分配那么多字节,然后告诉构造函数迭代器多