17

C 標準ライブラリは、I/O の安全性に関しては非常に貧弱です。多くの関数では、バッファ オーバーフロー ( getsscanf) が発生したり、適切な引数が指定されていない場合にメモリを破壊したり ( scanf) したりします。ときどき、これらの欠陥がない独自のライブラリを作成した進取の気性に富んだハッカーに出くわします。

あなたが見たこれらのライブラリの中で最高のものは何ですか? それらを製品コードで使用したことがありますか? もしそうなら、それは趣味のプロジェクト以上のものでしたか?

4

6 に答える 6

9

I use GLib library, it has many good standard and non standard functions.

See https://developer.gnome.org/glib/stable/

and maybe you fall in love... :)

For example:

https://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-strdup-printf

explains that g_strdup_printf is:

Similar to the standard C sprintf() function but safer, since it calculates the maximum space required and allocates memory to hold the result.

于 2009-01-28T14:43:08.200 に答える
5

これは、使用する最も安全なライブラリに関するあなたの質問に実際に答えているわけではありませんが、あなたが言及したバッファオーバーフローに対して脆弱なほとんどの関数には、バッファの長さを引数として取り、標準のときに開かれるセキュリティホールを防ぐより安全なバージョンがあります。メソッドが使用されます。

警告のレベルを緩和していない限り、非推奨のメソッドを使用すると、通常はコンパイラの警告が表示され、代わりにより安全なメソッドを使用するよう提案されます。

于 2009-01-28T03:34:28.923 に答える
4

Apache Portable Runtime (apr)ライブラリは、標準の C ライブラリよりも安全だと思います。私はこれを apache モジュールの一部として使用していますが、独立したプロセスにも使用しています。

于 2009-01-28T12:37:18.140 に答える
3

Windows には、「安全な」C/C++ ライブラリがあります。

于 2009-01-28T03:33:21.220 に答える
0

あなたはいつでも好きなライブラリを実装してそれを使用する自由があります-難しいのは、ソフトウェアが動作するのに必要なプラットフォームでライブラリが利用可能であることを確認することです。必要に応じて、標準関数のラッパーを使用することもできます。

それが本当に良いアイデアであるかどうかは多少議論の余地がありますが、より安全なC関数のセットのためにC標準委員会によって公開されたTR24731があります。そこには間違いなく良いものがいくつかあります。この質問を参照してください:CコードでTR 24731セーフ関数を使用していますか?、テクニカルレポートへのリンクが含まれています。

于 2009-01-28T14:54:01.983 に答える
-1

おそらく最初に尋ねる質問は、プレーンな C が本当に必要かどうかということです。(たぶん、.net や Java のような言語がオプションです。たとえば、バッファ オーバーフローはもはや問題ではありません)

別のオプションは、他の高レベル言語がオプションでない場合、プロジェクトの一部を C++ で記述することです。本当に C が必要な場合は、C++ コードをカプセル化する C インターフェイスを使用できます。

C++ 標準ライブラリに組み込まれているすべての高度な機能を追加すると、ほとんどの場合、C コードはわずかに高速になるだけです (そして、既存のテスト済みフレームワークよりも多くのバグが含まれます)。

于 2009-01-28T03:34:35.227 に答える