复制:
根据“请加入我,欢迎 memcpy() 加入 SDL Rogues Gallery ” memcpy
,因为不安全而被禁止。目标大小不清楚的gets()
,和类似的 api是有道理的。strcpy
是memmove()
下一个吗?
根据“请加入我,欢迎 memcpy() 加入 SDL Rogues Gallery ” memcpy
,因为不安全而被禁止。目标大小不清楚的gets()
,和类似的 api是有道理的。strcpy
是memmove()
下一个吗?
所有这些“安全”方法的要点是:
当然,您可以
memcpy_s()
通过错误的缓冲区大小轻松调用不安全。
[来源]
这就是为什么我发现这个 SDL 功能被过度炒作的原因。当然,如果编译器(或适当的运行时,在性能和/或内存方面代价高昂)不采取预防措施,这些问题在像 C 这样的语言中是固有的。
它还降低了程序的可移植性,我个人认为这是一个巨大的缺点。当然,微软不一定会同意。
在可能的情况下,通过正确使用(检查的)迭代器将代码迁移到 C++ 可能更有意义。这些操作虽然本质上也不安全,但更容易正确使用,并使错误代码脱颖而出。当然,自告奋勇者,所有那些 C 粉丝和 C++ 否认者现在都会追随我的皮肤......</p>
memmcopy 可能会为恶意用户的堆栈溢出创建一个开口。例如:在处理恶意 WordDocument 文件过程中存在特定缺陷。在 WordDocument 流中的偏移量 0xb4c 处解析期间可以触发溢出。在此偏移处,有一个 WORD 大小用作 memmove 调用的第三个参数。