摘要:可经验证(Verifiable)的托管(managed)代码是不会出现缓冲区溢出的问题的。但是在下列情况下,仍然要防止Buffer Overflow:
Unsafe C#;
COM Interop;
Platform Invokes (P/Invoke);
使用不可验证(Unverifiable)的语言,如Managed C++.
举个例子,下面这个private函数完全可能造成Buffer Overflow,调用它的函数必须防止这个问题。private unsafe static void PrivateCopyUnguarded(byte[] src, int srcIndex, byte[] dest, int destIndex, int length){ fixed(byte* srcPointer = src, destPointer = dest) { byte* srcPosition = srcPointer + srcIndex; byte* destPosition = destPointer + destIndex; while (length-- > 0) { *destPosition++ = *srcPosition++; } } }
下面是调用InternalCopyUnguarded的public方法:public static void MemoryCopy(byte[] src, int srcIndex, byte[] dest, int destIndex, int length){ if ((length < 0) || (srcIndex < 0) || (destIndex < 0) || (srcIndex + length > src.Length) || (destIndex + length > dest.Length)) { throwErrorException(); } PrivateCopyUnguarded(src, srcIndex, dest, destIndex, length);}可是:MemoryCopy的实现有问题么?敬请评论。
贴子以"现状"提供且没有任何担保也没有授予任何权利。...[
阅读全文]