### 2-9　［Memory］リージョン

［Memory］リージョンを使用すると、Dev.Boxの指定アドレスのメモリ内容を表示することができます。［Memory］リージョン内には、ACSII文字、バイト、ワード、またはロングとして、メモリの内容を表示することができます。現在の［Memory］リージョンでメモリ内容が変更されないように、メモリ領域を書き込み保護することができます。

［Memory］ウィンドウをスクロールするに従い、スライダの速度が速くなります。スライダの一番上（または下）をクリックすると、中央位置に戻ります。

#### ［Memory］リージョンでのショートカットメニューの使用

メニュー | 内容
Display Bytes | バイトとしてメモリ内容を表示。
Display Words | ワードとしてメモリ内容を表示。
Display Longs | ロングとしてメモリ内容を表示。
Display Quadwords | クワッドワードとしてメモリ内容を表示。
Display ASCII | 各バイト メモリのASCII値を表示。
Highlight Changes | Dev.Boxのメモリの変更位置を表示。
Set Bytes Per Line... | ラインごとに指定バイト数を表示。
Edit ASCII | ［Memory］リージョンのASCII値を変更。
Edit Memory Value | ［Memory］リージョンの値を変更。
Follow Pointer | メモリ内のポインタに従う。
Goto Address... | オリジンを設定。
Write Protect | 書き込み保護のオン、オフ。
Execution | プログラムの実行、停止、リスタート。カーソルの位置まで、または指定アドレスを実行するまで、プログラムを実行。プログラムファイルのすべてを同時実行。同時実行中のすべてのプログラムを停止。シングルステップコマンドを使用するか、ステップコマンドを実行。
Breakpoints | ブレークポイントのオン、オフの切り替え。ブレークポイントの有効化、無効化、設定、およびリセット。
Tools | メモリ内のパターンを検索。最後の検索を繰り返す。メモリ範囲をデータで埋める。メモリブロックを16進数でファイルに書き込む。
Properties | フォントとカラーの設定。1つのリージョン、リージョンタイプごと、各プロセッサごとの更新レートを設定。

#### メモリ内容の表示

#### ［Memory］リージョンの表示

次のいずれかを行います。

- ［Region］メニューをクリックして、［Type］をポイントし、［Memory］をクリック。
- ［Region］ツールバーの をクリック。
- リージョン内で、［Ctrl］＋右クリックして、［Memory］をクリック。

#### オリジンの設定

1. 右クリックして、［Goto Address...］をクリックします。
   ［Goto Address...］ダイアログボックスが表示されます。
2. 新規のオリジンに対するアドレスまたは記号を入力します。
3. 不正な記号を入力すると、警告が表示されます。
4. ［OK］ボタンをクリックします。

オリジンは、最初PCの値に設定されています。オリジンを式で設定することもできます。

#### 常に指定アドレスのメモリ内容を表示

1. 次のいずれかを行います。
   - ［Edit］メニューをクリックしてから、［Go To...］をクリック（［Ctrl］＋［G］キー）。
   - 右クリックして、［Goto Address...］をクリック。
   - ［Memory］リージョンタイトルバーのをクリック。 ［Goto Address...］ダイアログボックスが表示されます。
2. 式のリストから、メモリアドレスまたは式を入力するか選択します。
3. ［Lock］を選択して、［OK］ボタンをクリックします。

#### メモリ内のポインタに従う

1. 表示を［Display Longs］に変更します。
2. ポインタの値のメモリアドレスを選択します。
3. 右クリックして、［Follow Pointer］をクリックします（［Ctrl］＋［T］キー）。

［Memory］リージョンのオリジンが変わり、ポインタの値によって指定されたアドレスのメモリ内容が表示されます。

#### メモリのブロックを16進数でファイルに書き込む

1. ［Memory］リージョンで右クリックして、［Tools］をポイントしてから、［Hex Dump to File］をクリックします。［Hex Dump to File］ダイアログボックスが表示されます。
2. ［Destination filename］テキストボックスで、書き込むべきファイルのファイル名を入力します。［Start Address］テキストボックスで、開始アドレスを16進数で入力します。
3. 次のいずれかを行います。
   - ［Length］を選択して、メモリのブロック長を16進数で入力。
   - ［End Address］を選択して、最終アドレスを16進数で入力。
4. ［OK］ボタンをクリックします。これで、メモリの指定ブロックがファイルに書き込まれます。

#### メモリの編集

#### ［Memory］リージョンで値を変更

1. ［Memory］リージョンで、次のいずれかを行います。
   - 「＋」と「−」キーを使用して、現在の値をインクリメントしたり、ディクリメントする。
   - ダブルクリックするか、［Enter］キーを押してから、既存のバイト、ワード、またはロング値に上書き入力する。
   - 右クリックして、［Edit Memory Value...］をクリックする。
   - ［Ctrl］＋［Alt］＋［E］キーを押す。
   ［Enter a Value］ダイアログボックスが表示されます。
2. 式を入力します。
3. ［OK］ボタンをクリックします。

現在の基数に対する正しい値を入力してください。CodeScapeでは、メモリ値はすべて16進数で表示します。

#### メモリを指定のデータで埋める

メモリ範囲を指定のデータで埋めるには、次の操作を行います。

1. ［Memory］リージョンで、右クリックして、［Tools］を選択して、［Fill..］をクリックします。
2. ［Fill Expression］テキストボックスに、値を入力します。
3. ［Start Address］テキストボックスに、値を入力します。
4. ［End address］または［Length］を選択します。
5. 下のテキストボックスに値を入力します。
6. モード（Mode）をテキスト（ASCII）、Byte、Word、LongまたはQuadとして選択します。
7. 次のいずれかを行います。
   - ［Convert Native Endian］チェックボックスを選択して、実メモリの値を表示。
   - ［Convert Native Endian］チェックボックスをオフにして、メモリをバイト順に格納。
8. ［OK］ボタンをクリックします。

#### メモリの検索

メモリ領域を定義して、データパターンを指定して検索するには、次の操作を行います。

1. ［Memory］リージョンで、右クリックして、［Tools］を選択します。
2. ［Find］をクリックします。［Find In Memory］メモリダイアログボックスが表示されます。
3. ［Find Pattern］テキストボックスに、検索文字列を入力します。

   バイナリ、8進数、10進数、16進数モードでは、検索パターンはカンマまたはセミコロン（等価）のいずれかで区切ります。

4. ［Start Address］テキストボックスに、値を入力します。

   デフォルト値は、リージョンの開始アドレスです。検索を実行したことがない場合は、現在のメモリブロックの開始アドレスが使用されます。

5. ［End Address］または［Length］を選択します。

   最終アドレスのデフォルト値は、［Memory］リージョンに最後に表示されたバイトです。

6. 下のテキストボックスに値を入力します。
7. データ長として、Byte、Word、Longを選択します。
8. ［Forward］または［Reverse］を選択して、検索の方向を指定します。
9. ［OK］ボタンをクリックします。

指定した検索が不正な場合、「Invalid Address」がフィールドに表示されるので、これを編集します。 検索が一致した場合は、そのアドレスが表示されます。無効なメモリ領域、書き込み専用メモリ、モニタ用などの重要なメモリ上では、検索はスキップされます。

#### データ長

データ長を利用すると、検索パターンとDev.Boxのメモリ内のデータとの整列がとられます。これにより、検索パターンとメモリ内容の比較の方法を指定します。可能なデータ長は、選択するモードによって異なります。

有効なモードとデータ長の組み合わせ

16進数とバイトの幅が設定されている場合、次のパターンは等価です。

FF，FF，FF，FF，34，DC
FF；FF；FF；FF；34；DC
FFFFFFFF34DC

#### 「\」指定子

「\」指定子を使用して、特殊文字を検索テキストに入れることができます。

必ず検索テキストは引用符で囲ってください。

例
パターンの”How are you\？”は、”How are you？”を検索します。

#### 「？」ワイルドカード

ワイルドカード文字「？」は、バイナリ、16進数モードで使用することができます。常にマッチするように16進数で1つのニブル（4ビット）、バイナリモードで1ビットを指定するには、「？」を使用します。

例
16進数モード：
FF？Fは、FF0F，FF1F，FF2F，...，FFFFを検索します
バイナリ モード：
？？？？1111は、00001111，00011111，...，11111111を検索します。

#### 「＠」ワイルドカード

ワイルドカード文字の「＠」は、テキストモードで使用することができます。2バイト文字1文字を指定するには、「＠」を使用します。

#### 自動パディング

バイナリ、10進数、16進数モードでは、検索パターンは自動的に左側をパディングされます。パディングは、「0」または「？」で区切り文字に依存します。

#### カンマ区切り

検索パターンをカンマ（デフォルト）で区切りると、左側はゼロパディングされます。

例えば、16進数モードのバイト幅の場合、

FFFFFFFF34DCとFF，FF，FF，FF，34，DC

は、同一の検索となります。

最初の検索パターンのカンマ区切りが暗示的に使用されます。

さらに別の例、16進数モードとワードの場合、

「f，87d，a」は、自動的に、000F，087D， 000Aになります。
「f87da」は、自動的に、000F，87DAになります。
「，」は、自動的に、0000になります。

カンマを単独で使用すると、パターン「0000」が作成されます。この機能の使用には注意が必要となります。例えば、「，7」は、「0000，0007」になります。

#### セミコロン区切り

検索パターンをセミコロンで区切ると、ワイルドカードの「？」でパディングされます。例えば、16進数モードでワード幅の場合、

「f；8d；a」は、自動的に、？？？F，？87D，？？？Aになります。
「f；87da」は、自動的に、？？？F，87DAになります。
「；」は、自動的に、？？？？になります。

#### 等価な検索パターン

カンマとセミコロンの区切り文字を使用すると、同じ検索パターンを異なる手段で検索することができます。次のパターンは、16進数とワードが設定されていると、同じになります。

FF，FF，FF，FF，34，DC
FF；FF；FF；FF；34；DC
FFFFFFFF34DC

カンマとセミコロンの区切り文字を混ぜると、詳細な検索パターンを作成することができます。例えば、16進数とロング幅の場合、

f；f0f0f0f0，fffffff？，7は、？？？？？？？F，F0F0F0F0，FFFFFFF？，？？？？？？？7になります。

[←] | [INDEX] | [→]