どのような整数オーバーフローは何ですか?

このFAQに答えるk4thrynによって書かれました:

整数オーバーフロー、または整数の包装は、プログラムでは、実際には数値データ型で開催される値はバイト単位でのデータ型のサイズが制限されているに基づいて潜在的な問題にされています。 のANSI Cは、以下の最小サイズを使用しています:

データ型 サイズ(バイト)
文字 1
短い 2
INTは 2
長い 4

実際には、多くのコンパイラは、 4バイトのINTを使用しています。 また、データ型の実際の範囲は、署名されているかどうかに依存することに注意する必要があります。 中に短い符号なし0 〜 65535の間にされることがあります例えば、署名2 -短期バイト-32767から32767の間にあり、可能性があります。 参照してください[お客様のコンパイラに固有の番号について] / limits.hファイルが含まれています。

どうしてそんなこと気にいいですか? 場合は、それを保持するためにも小さいデータ型に値を入れるしようとすると、高次ビット、およびドロップされると、下位のビットのみが格納されている。 モジュロ演算は、その値に収まるようにデータを保管する前に実行されているとのもう一つの方法です。 我々の未署名の短い例撮影:

制限: 65535または1111 1111 1111 1111
大きすぎる: 65536または1 0000 0000 0000 0000
どのように保存されて: 0または0000 0000 0000 0000

これは、高(または左の値が大き過ぎるのほとんど)ビットを落としているため、上記のように明らかにし、その結果だ。 か、何に保存されていることの結果である

  =値%保存(制限+ 1 ) 
 または 
 六五五三六% ( 65535 + 1 ) = 0 

署名データ型では、いくつかの一見奇妙な振る舞いをする結果とは少し異なる結果です:

正の制限: 32767または0111 1111 1111 1111
大きすぎる: 32768または1000 0000 0000 0000
どのように保存されて: -32768

なぜだ? これは2のため"と褒め、 "負の数がどのように表現されるバイナリです。 かいつまんで、範囲( 0 〜 0111 1111 1111 1111 )の最初の半分以上の順に正の数については最大するために使用されています。 の範囲の2番目の半分以上を順番に、負の最大のために使われます ので、署名2の負の範囲は-32768 -1を通じてショートバイトの順にされています。

でも、なぜこの問題は、要求されていないんですよね? メモリは、符号なし整数データ型の値に基づいて配分されていると仮定します。 その値をラップしている場合は、ほんのわずかなメモリを利用できるようにされる可能性があります。 または比較する場合は、符号付き整数値との間にいくつかの他のコードには、前者は後者よりも、その値が負の場合は、比較を渡すとしている以下にすべきであると仮定したoverflownされています。 しかし、あるものは、プログラマーの意図したように動作するのかな? おそらくされていません。

整数オーバーフローに関する情報の追加ソース

また、この資料の範囲外ですが、そこに整数オーバーフローのバグの詳細については詳細になる他のリソースは、その予防、およびその開発。 すなわち、オーデッドHorovitzによってPhrack # 60 ( 1つに2つの非常に興味深い記事を、一blexim )の整数オーバーフローの脆弱性があります。 整数の包装は、 "プロのソースコード監査では、 2002年米国ブラックハットブリーフィング(ダウド、エはALS ) "と題したプレゼンテーションを覆われている。

実験に整数オーバーフローのツールで

このプログラムはint_wrap.c場合は、コマンドラインかどうかは、データのタイプ(ショート)に指定することにより、この現象で署名する必要がありますまたは符号なしの値を使用すると、周りを再生することができます。

注: Perlのは、 250桁の数を制限していると、エラー"番号が長すぎると死ぬ" (バージョン5.8.0テスト) 。 しかし、有効桁数よりもずっと少なくなっています。

セキュアなコードを書く ビルセキュリティソフトウェア 安全なコーディング セキュアなプログラミング以前
Amazon.comでセキュアなプログラミングを購入、これらの優れた図書


上位5つの無料ネットワークツール

脆弱性管理ダミーの

Qualysの脆弱性管理ダミーで私たちのお友達と技術のための電子版によくあるご質問読者の無料コピーを提供しています。

脆弱性管理ダミー:

  • 脆弱性管理のための重要な必要性を説明
  • 詳細は最も成功した脆弱性管理プログラムの実践手順不可欠
  • 輪郭の様々な脆弱性管理ソリューション-それぞれの長所と短所を含む
  • ハイライトは、 QualysGuard脆弱性管理ソリューション賞を受賞
  • お客様の重要なリソースからの脆弱性を取り除くために10ポイントのチェックリストを提供
ブックマーク整数オーバーフローは何です

最新のブログの投稿


英語 英語 ドイツ語 ドイツ語 スペイン語 スペイン語 フランス語 フランス語 イタリア語 イタリア語 ポルトガル語 ポルトガル語 ロシア語 ロシア語 オランダ語 オランダ語
ギリシャ語 ギリシャ語 ヒンディー語 ヒンディー語 日本語 日本語 韓国語 韓国語 中国語 中国語 中国語(簡体字) 中国語(簡体字) アラビア語 アラビア語

著作権2009 技術に関するよくある質問。 版権所有。 プライバシーポリシー。