一个潜在问题:内存分配操作中可能出现的整数溢出
内存 一个 操作 出现 可能 整数 分配 溢出
2023-09-14 09:10:45 时间
新的攻击向量
整数溢出正在逐渐成为一个新的安全攻击向量。
一个容易被开发者忽视的场景是在使用new[]进行内存分配的时候出现的整数溢出。
两个例子
考虑下面的代码,它可能会执行一个未经检查的隐式乘法操作。
如果你仔细研究一下上面代码生成的汇编代码的话,如下图所示:
请注意,在上面的汇编代码中,它并未检查与sizeof(int)的乘积是否溢出。别有用心者可以通过传递类似howmany = 0x40000001的值来诱导代码分配不足的内存。对于比较大型的数据结构,乘法溢出会以更快的速度发生。
下面我们再来看一个例子
该类还包含一个构造函数,因此分配它们的数组涉及两个步骤:分配内存,然后构造每个对象。 allocate_myclass函数的汇编代码如下:
此函数进行大小的未经检查的乘法操作,然后尝试分配那么多字节,然后告诉构造函数迭代器多
相关文章
- 教大家一个WPJAM Basic如何开启Memcacached内存缓存和对应的 WordPress 插件
- 使用 Node.js Stream API 减少服务器端内存消耗的一个具体例子
- 宝塔版面内存太小,机器经常数据库自己停止,添加一个自动数据库任务再试试?
- Msmap 是一个内存 WebShell 生成器
- 深入理解Java内存模型详解编程语言
- 一个可以参考的JVM内存分配详解编程语言
- 使用情况深入了解 Linux 内存使用情况(如何查看linux的内存)
- 10min 手写一个内存监控系统
- 结构优化 Oracle 数据库性能:大页内存结构(oracle大页内存)
- 探寻Redis:观察它的内存利用情况(查看redis使用的内存)
- Linux系统如何查看内存剩余空间(linux内存剩余空间)
- Linux查看CPU内存:一个简单的指南(linux查看cpu内存)
- 自主回收让Redis内存更有效(手动回收redis内存)
- 优化Oracle内存管理优化一个典型案例(oracle内存 典型)
- 查看Redis剩余内存一个实用指南(查看redis 剩余内存)
- 估算Redis占用的内存量一个重要指标(估算redis占用内存)