複製:
「 memcpy() を SDL Rogues Gallery に歓迎するために参加してください」によるとmemcpy
、安全ではないとして禁止されています。gets()
、strcpy
および宛先サイズが不明な同様の APIは理にかなっています。memmove()
次は?
「 memcpy() を SDL Rogues Gallery に歓迎するために参加してください」によるとmemcpy
、安全ではないとして禁止されています。gets()
、strcpy
および宛先サイズが不明な同様の APIは理にかなっています。memmove()
次は?
これらすべての「安全な」方法のポイントは次のとおりです。
もちろん、
memcpy_s()
バッファ サイズを間違えると、簡単に insecure を呼び出すことができます。
【ソース】
これが、この SDL 機能が非常に誇大宣伝されている理由です。もちろん、このような問題は、コンパイラ(またはパフォーマンスやメモリの点でコストがかかる適切なランタイム) によって予防策が講じられていない場合、C のような言語に固有のものです。
また、プログラムの移植性が低下しますが、これは個人的には大きな欠点です。もちろん、Microsoft が必ずしも同意するとは限りません。
可能であれば、(チェックされた) イテレータを適切に使用してコードを C++ に移行する方が理にかなっています。これらの操作は本質的に安全ではありませんが、正しく使用する方が簡単で、間違ったコードが目立ちます。もちろん、購入者に注意してください。C ファンと C++ 否定者はすべて、私の肌を欲しがるでしょう…</p>
memmcopy は、悪意のあるユーザーによるスタック オーバーフローの入り口を作る可能性があります。例: 特定の欠陥は、悪意のある WordDocument ファイルの処理中に存在します。オーバーフローは、WordDocument ストリームのオフセット 0xb4c での解析中にトリガーされる可能性があります。このオフセットには、memmove 呼び出しの 3 番目のパラメーターとして使用される WORD サイズがあります。