2

複製:

安全なプログラミングで Memcpy()?


「 memcpy() を SDL Rogues Gallery に歓迎するために参加してください」によるとmemcpy、安全ではないとして禁止されています。gets()strcpyおよび宛先サイズが不明な同様の APIは理にかなっています。memmove()次は?

4

2 に答える 2

7

これらすべての「安全な」方法のポイントは次のとおりです。

もちろん、memcpy_s()バッファ サイズを間違えると、簡単に insecure を呼び出すことができます。

ソース

これが、この SDL 機能が非常に誇大宣伝されている理由です。もちろん、このような問題は、コンパイラ(またはパフォーマンスやメモリの点でコストがかかる適切なランタイム) によって予防策が講じられていない場合、C のような言語に固有のものです。

また、プログラムの移植性が低下しますが、これは個人的には大きな欠点です。もちろん、Microsoft が必ずしも同意するとは限りません。

可能であれば、(チェックされた) イテレータを適切に使用してコードを C++ に移行する方が理にかなっています。これらの操作は本質的に安全ではありませんが、正しく使用する方が簡単で、間違ったコードが目立ちます。もちろん、購入者に注意してください。C ファンと C++ 否定者はすべて、私の肌を欲しがるでしょう…</p>

于 2009-05-15T17:56:08.697 に答える
0

memmcopy は、悪意のあるユーザーによるスタック オーバーフローの入り口を作る可能性があります。例: 特定の欠陥は、悪意のある WordDocument ファイルの処理中に存在します。オーバーフローは、WordDocument ストリームのオフセット 0xb4c での解析中にトリガーされる可能性があります。このオフセットには、memmove 呼び出しの 3 番目のパラメーターとして使用される WORD サイズがあります。

于 2009-05-15T17:57:00.300 に答える