いけりり★Blogの月別の過去ログ

現在 January 2009 を表示しています
カテゴリー: information
投稿者: ikeriri

リックテレコム刊行の「情報セキュリティスペシャリスト コンパクトブック―いつでもどこでも学習できる (情報処理技術者試験) (単行本)」について、ここを見て下さったこの本を持つ皆さんに、補足説明をさせていただきます。

本書89ページのバッファオーバーフローについて、以下のように補足説明します。


C/C++言語の変数や配列は宣言されてから削除されるまでの寿命があります。この期間のことを記憶域期間といいます。記憶域期間には、「自動記憶域期間」、「動的記憶域期間」、「静的記憶域期間」の3種類があります。なお、一般には、自動記憶域期間を「スタック」、動的記憶域期間を「ヒープ」で実装しますが、これはCPUやコンパイラなどの環境により異なる点に注意してください。したがって、本書ではあえて「スタック」や「ヒープ」という言葉を使っていません。
また、情報処理技術者試験では、スタックエリアやヒープエリア、静的記憶域期間に関する問題は過去出題されていません。
※(再補足2009年3月26日)午前問題には基本データ構造としてのスタック、ヒープの出題はあります。また、平成19年度春テクニカルエンジニア(情報セキュリティ)において、スタックにセットするカナリア値がテーマになりました。(


補足
自動記憶域期間は、プログラムの関数内で宣言を行った場合に用いられる期間です。このとき、変数や配列は{}のブロック内でのみ有効になります。また、}を抜けるとメモリから自動的に解放されます。
静的記憶域期間はstaticを付けたり、プログラムの関数外で宣言を行った場合に用いられる期間です。このとき、変数や配列はプログラムの実行開始時にメモリが確保され、実行中は確保され続け、プログラム終了時に解放されます。
動的記憶域期間はnew演算子を用いて宣言された場合に用いられる期間です。このとき、変数や配列は宣言時に領域が確保され、delete演算子を用いてプログラマが明示的に開放する必要があります。


サンプルプログラム

//自動記憶域期間、動的記憶域期間、静的記憶域期間を確認するプログラム
  #pragma argsused

using namespace std;

int main(int argc, char argv[])
{
    cout << "変数のテスト\n";
    int a;    //int型変数(自動記憶域期間)
    int *pa;  //int型変数のポインタ(自動記憶域期間)
    pa = new int(5);  //paが動的記憶域期間のint(5)を指し示します。
    static int b=10; //int型変数(静的記憶域期間)
    cout << "int aのアドレス" << &a << "\n";
    cout << "int *paのアドレス" << &pa << "\n";
    cout << "int *paの指し示すアドレス" << pa << "\n";
    cout << "int *paの中身" << *pa << "\n";
    cout << "static int bのアドレス" << &b << "\n";
    a=1; *pa=10; //変数の操作
    delete pa; //動的記憶域期間に確保したオブジェクトの破棄

    cout << "配列のテスト\n";
    int aiA[10]; //int型配列(自動記憶域期間)
    int *paiA; //int型配列を指すポインタ(自動記憶域期間)
    paiA = new int[10]; //paiAがint型配列の先頭を指す(動的記憶域期間)
    paiA[0] = int(3);//配列要素の操作
    static int aiB[]={0,1,2}; //int型配列(静的記憶域期間)同時に宣言します
    cout << "int aiA[10]の先頭アドレス" << &aiA << "\n";
    cout << "int *paiAのアドレス" << &paiA << "\n";
    cout << "int *paiAの指し示すアドレス" << paiA << "\n";
    cout << "int *paの中身" << paiA[0] << "\n";
    cout << "int aiB[]の先頭アドレス" << &aiB << "\n";
    delete[] paiA; //自動記憶域期間に確保したint配列の削除
    return 0;
}



ビルドと実行結果
著者の環境(WindowsXP/BorlandC++コンパイラだとこんな感じで実行されます)

bcc32 -D_DEBUG -g100 -j25 -Od -r- -k -y -v -vi- -tWC -c -IC:\CBuilderX\include -o"C:\Documents and Settings\Administrator\cbproject\Sample20090128\windows\Debug_Build\sample20090128.obj"   sample20090128.cpp
Borland C++ 5.6.4 for Win32 Copyright (c) 1993, 2002 Borland
sample20090128.cpp:
ilink32 -D -ap -Tpe -x -Gn -v -LC:\CBuilderX\lib  c0x32.obj windows\Debug_Build\sample20090128.obj,"C:\Documents and Settings\Administrator\cbproject\Sample20090128\windows\Debug_Build\Sample20090128.exe",,cw32.lib import32.lib,,
Turbo Incremental Link 5.65 Copyright (c) 1997-2002 Borland

C:\Documents and Settings\Administrator\cbproject\Sample20090128\windows\Debug_Build\Sample20090128.exe

変数のテスト
int aのアドレス1245064
int *paのアドレス1245060
int *paの指し示すアドレス8601944
int *paの中身5
static int bのアドレス4419748
配列のテスト
int aiA[10]の先頭アドレス1245012
int *paiAのアドレス1245052
int *paiAの指し示すアドレス8601944
int *paの中身3
int aiB[]の先頭アドレス4419752


 

カテゴリー: information
投稿者: ikeriri

book796 『パケットキャプチャ入門』に続くパケット解析書 第2弾!!パケットキャプチャ実践技術 Wiresharkによるパケット解析応用編が発行されます!→書籍案内はこちら
本書は、『パケットキャプチャ入門-LANアナライザWireshark活用術-』の続編にあたります。そのため本書では、前書よりも比較的多くのプロトコルや複雑なシーケンス、Wiresharkの応用操作について紹介しています。
具体的には、ネットワーク遅延、TCPデータフロー、HTTP、VoIP、SSL、ウイルス等について詳しく解説するとともに、実践的なパケットキャプチャ手法やデータの再現方法、トレンド分析・統計のノウハウを紹介しています。

竹下 恵 著
B5判
432ページ
定価:3,570円(税込)(本体:3,400円+税)
ISBN:978-4-89797-796-6
カテゴリー: information
投稿者: ikeriri

ABCD0005あけましておめでとうございます。いけりり★ネットワークサービス竹下恵です。昨年は一年間どうもありがとうございました。今年は昨年以上にいけりりならではの製品やサービスを提供していければと思います。教育、コンサルテーション、執筆はもちろんのことパケットキャプチャ、セキュリティを中心とした製品やサービスにも取り組んでいきたいと思います。本年もいけりり★ネットワークサービスをよろしくお願いします。2009年1月1日 竹下恵

←前の記事|次の記事→