2

复制:

安全编程中的 Memcpy()?


根据“请加入我,欢迎 memcpy() 加入 SDL Rogues Gallerymemcpy,因为不安全而被禁止。目标大小不清楚的gets(),和类似的 api是有道理的。strcpymemmove()下一个吗?

4

2 回答 2

7

所有这些“安全”方法的要点是:

当然,您可以memcpy_s()通过错误的缓冲区大小轻松调用不安全。

[来源]

这就是为什么我发现这个 SDL 功能被过度炒作的原因。当然,如果编译器(或适当的运行时,在性能和/或内存方面代价高昂)不采取预防措施,这些问题在像 C 这样的语言中是固有的。

它还降低了程序的可移植性,我个人认为这是一个巨大的缺点。当然,微软不一定会同意。

在可能的情况下,通过正确使用(检查的)迭代器将代码迁移到 C++ 可能更有意义。这些操作虽然本质上也不安全,但更容易正确使用,并使错误代码脱颖而出。当然,自告奋勇者,所有那些 C 粉丝和 C++ 否认者现在都会追随我的皮肤......</p>

于 2009-05-15T17:56:08.697 回答
0

memmcopy 可能会为恶意用户的堆栈溢出创建一个开口。例如:在处理恶意 WordDocument 文件过程中存在特定缺陷。在 WordDocument 流中的偏移量 0xb4c 处解析期间可以触发溢出。在此偏移处,有一个 WORD 大小用作 memmove 调用的第三个参数。

于 2009-05-15T17:57:00.300 回答