memcpy不安全吗?

时间:2009-05-15 17:51:49

标签: memcpy

重复:

  

Memcpy() in secure programming?


根据“Please Join me in welcoming memcpy() to the SDL Rogues Gallerymemcpy被禁止为不安全。 gets()strcpy和目标大小不明确的类似api是有道理的。接下来是memmove()吗?

2 个答案:

答案 0 :(得分:6)

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

  

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

[Source]

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

它还使程序的便携性降低,我个人认为这是一个巨大的劣势。当然,微软不一定会同意。

如果可能,在正确使用(已检查)迭代器的情况下将代码迁移到C ++可能会更有意义。这些操作虽然本质上不安全,但更容易正确使用,并使错误代码脱颖而出。当然,需要注意的是,所有那些C粉丝和C ++否认者现在都会在我的皮肤之后......

答案 1 :(得分:0)

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