分かりやす〜い
コンピュータ技術情報

TOPに戻る
▼Processor
バッファオーバーフロー
┣ 異常な動作
┣ 本当に怖い事
┣ プログラムを作る
┣ バッファオーバーフロ
┃ ーを発生させる

┣ スタック領域の構成
┣ 何故強制終了されるの
┃ か?

┣ 強制終了されないよう
┃ に作り変える

┣ 任意のコードを実行す
┃ る

┣ of1.cとof2.cとの違い
┣ 例外
┣ 例外ハンドラの行う事
┣ of3.cを作る
┣ of1.cとof3.cとの違い
┣ of3.exeの例外ハンド
┃ ラ

┣ of3.exeを強制終了す
┃ るのは?

┣ 例外ハンドラの特徴
┣ Blue Screen
┣ BufferOverFlow応用
┃ プログラム

┗ 機械語の説明

Copyright(C) 2001-2002.ugpop. All rights reserved.




■デジタル用語辞典:
■ 例外 ■

前回は今まで作成してきたプログラム"of1.c"と"of2.c"の動作
の違いについて復習し、どちらがよりコンピュータウィルスに
近い動きをするのか説明しました。

そして、"of1.c"というプログラムはバッファオーバーフロー
を発生し、即、強制終了するプログラムであり、実際には"of-
1.c"の方がよりコンピュータウィルスに近い動作をするという
事も説明しました。

今回は、プログラムが強制終了する時にどのような事が行われ
るのかを説明します。

まずは前回のイメージをもう1度見てみましょう。


┌──────────────────────────┐
│         OF1.EXE          │
│                          │
└───┬──────────────────────┘
    │                       スタック領域
    │call命令               格納 ┌──────┐
    ├─────────────────────→│ 呼出し元 │
    │    制御を移行┌────────┐   └──────┘
    ├────────→│ main関数 │
    │         │        │
    │         └───┬────┘
    │             │
               ┌──┴──┐
               │コピー処理│
               └──┬──┘
                  │×バッファオーバーフロー発生
                  │         スタック領域
                  │        ┌──────┐
                  ├───────→│1F 1E 1D 1C │
                  │        └──────┘
                  │処理終了     スタック領域
                  │どこへ戻るか参照┌──────┐
                  │←───────┤1F 1E 1D 1C │
                  │        └──────┘
               ×××××××
               ×そんな所に×
               ×実行可能な×
               ×プログラム×
               ×ありません×
               ×××××××


上のイメージでは、「呼出し元」の情報が格納されている部分
に、バッファオーバーフローが原因で「1F 1E 1D 1C」という
わけの分からない値が書き込まれてしまっています。

インテルプロセッサは「1F 1E 1D 1C」という場所に制御を移
行させようとするのですが、そこには実行可能なコードが存在
していません。

そうなると、この後、インテルプロセッサはどこの処理を実行
すれば良いのか分からなくなり、どうにも動きようがなくなっ
てしまいます。

この様な事態が発生した場合に、インテルプロセッサは次に何
の処理を行えば良いのでしょうか?


実はこの様な事態が発生した場合に、インテルプロセッサには、
ある仕組みが用意されています。

それは、「割込み」というものです。
「割込み」というのは、ある処理を行っている時に、何らかの
理由により別の処理を行わなければならなくなった時の為に用
意されています。

割込みの種類にはいくつかありますが、今回の場合のように、
インテルプロセッサがどうにも動きようがなくなってしまった
場合に発生する割込みの事を、特に「例外」といいます。

Windowsを使用していると、しょっちゅう「ページ違反が発生
しました。」とか、「一般保護例外が発生しました。」と表示
されると思います。
あれは全て「例外」が発生したから表示されているのです。

割込みが発生すると、プロセッサはあらかじめOSにより登録さ
れている処理に制御を移行させます。

この割込みが発生した時に動作開始するプログラムの事を、
「割込みハンドラ」といいます。

「割込みハンドラ」の中でも、「例外」が発生した時に動作す
るハンドラの事を、特に「例外ハンドラ」ともいいます。

"of1.c"というプログラムも「例外」が発生するプログラムな
ので、「例外ハンドラ」が動作開始する事になります。

以下に「例外ハンドラ」が動作開始するイメージを示します。
先ほどのイメージとは、1番下の部分が異なるだけです。


┌──────────────────────────┐
│         OF1.EXE          │
│                          │
└───┬──────────────────────┘
    │                       スタック領域
    │call命令               格納 ┌──────┐
    ├─────────────────────→│ 呼出し元 │
    │    制御を移行┌────────┐   └──────┘
    ├────────→│ main関数 │
    │         │        │
    │         └───┬────┘
    │             │
               ┌──┴──┐
               │コピー処理│
               └──┬──┘
                  │×バッファオーバーフロー発生
                  │         スタック領域
                  │        ┌──────┐
                  ├───────→│1F 1E 1D 1C │
                  │        └──────┘
                  │処理終了     スタック領域
                  │どこへ戻るか参照┌──────┐
                  │←───────┤1F 1E 1D 1C │
                  │        └──────┘
               ×××××××
               ×そんな所に×
               ×実行可能な×
               ×プログラム×
               ×ありません×
               ×××××××
                  │
            ┌─────┘★例外発生
            │
            ↓
      ┌──────────┐
      │          │
      │例外ハンドラ動作開始│
      │          │
      └──────────┘


「例外」が発生し、「例外ハンドラ」が動作開始しています。

この例外ハンドラは何を行うのかと言うと、WindowsなどのOS
では「不正な処理が行われたので強制終了します。」などのメ
ッセージを表示する為のプログラムを起動します。

また、UNIXなどではcore(コア)ダンプというデバッグ用のフ
ァイルを出力してアプリケーションソフトを強制終了します。

まだこの時点でもコンピュータウィルスは動作開始する事はあ
りません。

動作開始するのはもうすぐ後です。

続きは次回に。



▲このページの上へ

▲このページの上へ

←前に戻る    ▲このページの上へ    続きを読む→