根据“Please Join me in welcoming memcpy() to the SDL Rogues Gallery”memcpy
被禁止为不安全。 gets()
,strcpy
和目标大小不明确的类似api是有道理的。接下来是memmove()
吗?
答案 0 :(得分:6)
所有这些“安全”方法的要点是:
当然,您可以通过错误地调整缓冲区大小来轻松调用
memcpy_s()
不安全。
[Source]
这就是为什么我发现这个SDL功能高度过度炒作的原因。当然,如果编译器没有采取预防措施(或者在性能和/或内存方面成本很高的适当运行时),这类问题在C语言中是固有的。
它还使程序的便携性降低,我个人认为这是一个巨大的劣势。当然,微软不一定会同意。
如果可能,在正确使用(已检查)迭代器的情况下将代码迁移到C ++可能会更有意义。这些操作虽然也本质上不安全,但更容易正确使用,并使错误代码脱颖而出。当然,需要注意的是,所有那些C粉丝和C ++否认者现在都会在我的皮肤之后......
答案 1 :(得分:0)
memmcopy可能会为恶意用户创建堆栈溢出开放。例如:在处理恶意WordDocument文件期间存在特定缺陷。 在解析WordDocument中的偏移量0xb4c时,可以触发溢出 流。在此偏移处,有一个WORD大小用作第三个参数 给一个memmove电话。