-1

如何为不同的操作系统有效地使用 malloc() 函数。

4

4 回答 4

1

我发现声称malloc是漏洞来源的说法非常可疑。告诉你这件事的人可能在想:

  • 计算要传递给的 size 参数的算术溢出malloc,或
  • 访问由 获得的数组时,数组越界访问malloc

这些都不malloc是.

操作系统或库实现不需要做任何事情来“避免漏洞malloc”,因为此类漏洞不在malloc. 他们在违反 C 语言合同的损坏的应用程序代码中。

于 2012-03-02T01:43:30.037 回答
0

不安全地使用 malloc 可能会导致几个主要漏洞,例如:

  • 如果 malloc 失败,结果可能为 NULL。未能检查和处理这种情况可能会导致在某些情况下可以利用的空解引用。
  • 如果传递给 malloc 的大小太小——通常是由溢出的算术运算引起的——那么 malloc 可能会成功,但返回的缓冲区小于原始开发人员的预期。使用此缓冲区可能会导致堆溢出。
  • 如果您最终未能通过调用 free() 来释放内存,则可能会发生内存泄漏,这可能会用于耗尽内存,例如作为拒绝服务攻击的一部分。

Malloc 是一个标准库函数。它不保证由操作系统处理(它是每个平台的 CRT 的一部分),除了上述规则之外,不同的实现之间没有可以依赖的共性。Malloc 并非天生不安全。人们使用它是可以的。

于 2012-03-06T11:22:07.640 回答
0

《软件安全评估的艺术》这本书很好地描述了您在使用malloc().

于 2012-03-01T19:56:16.043 回答
0

首先,在大多数现代操作系统上,malloc()是由运行时库实现的。不是操作系统。在此处查看 GNU 实现的源代码。

其次,通过只为进程空间增长提供已清除的 RAM 来确保进程之间的安全性。当 malloc 的内存池耗尽时,C 运行时malloc()库函数可能会向操作系统请求额外的内存。

于 2012-03-01T19:59:46.617 回答