さちこ(徹夜で読書) 説明書 ===操作方法=== 本ツールを起動してから初回検索までの操作は、だいたい「ウィンドウ左側を上から下へ」という感じです。 ウィンドウ左側 ■「プロセス選択」 メモリ検索の対象にするプロセスを選びます。 リストの中身をダブルクリックで選択しても良いですし、シングルクリックなどで選択してからOKを押しても良いです。 新たにプロセスを選択すると、それまでの検索結果やターゲットメモリ記憶内容は無効になります。 ■「検索開始アドレス」「検索終了アドレス」 メモリ検索およびターゲットメモリ記憶の対象にするアドレスを指定します。 16進数で入力します。 入力した後にフォーカスを移動すると、適当に補正されることがあります。 対象となるメモリは、読み書き可能な領域のみです。書き込み不可の領域は対象外です。 ■「ウィンドウタイトルを↑に変更」 検索動作とは直接関係ありません。ウィンドウタイトルを変更します。 0文字にすることも、空白文字にすることもできます。 多重起動時にそれぞれのウィンドウを区別するために使用しても良いですし、ボタンは押さずに単なるメモ欄として使用しても良いでしょう。 ■「検索結果の最大記憶件数(1つのデータ型あたり)」 10進数で入力します。 最大記憶件数に指定できる最大の値は100万件です。 ■「フォント変更」 このボタンも、検索動作とは直接関係ありません。 このツールは起動時に一部分のフォントを等幅フォントに切り替えているのですが、環境によっては非常に読みにくいフォントになってしまうようです。 そのような場合、このボタンを押すと切り替え前のフォントに戻すことができます。もう一度押すと再び切り替えます。 ■「検索データ型」グループ まずは検索するデータの型が整数か小数か、とデータサイズによって、左端に縦に並んでいるチェックボックスの1つ以上にチェックを入れます。 さらに、整数の符号の有無やエンディアンによって、それぞれ縦に並んでいるラジオボタンのうち1つずつをクリックします。 これらの組み合わせによって、14種類の型のうち、どの型で検索する/しないのかが決まります。 略称 データ型 INT1U 1バイト整数符号なし INT2U_LE 2バイト整数符号なしリトルエンディアン INT4U_LE 4バイト整数符号なしリトルエンディアン INT1S 1バイト整数符号あり INT2S_LE 2バイト整数符号ありリトルエンディアン INT4S_LE 4バイト整数符号ありリトルエンディアン FLOAT4_LE 4バイト浮動小数点数リトルエンディアン FLOAT8_LE 8バイト浮動小数点数リトルエンディアン INT2U_BE 2バイト整数符号なしビッグエンディアン INT4U_BE 4バイト整数符号なしビッグエンディアン INT2S_BE 2バイト整数符号ありビッグエンディアン INT4S_BE 4バイト整数符号ありビッグエンディアン FLOAT4_BE 4バイト浮動小数点数ビッグエンディアン FLOAT8_BE 8バイト浮動小数点数ビッグエンディアン 検索ボタンを1回押すだけで、最大14通りの検索を実施することになります。 この略称は、ウィンドウ右上の「検索結果」で使用されます。 ■「アラインメントに従わないアドレスも検索対象にする」 適切な表記では無いかもしれません。 チェックボックスをOFFにした状態では、 2バイト整数のアドレスは2の倍数。 4バイト整数と4バイト浮動小数点数のアドレスは4の倍数。 8バイト浮動小数点数のアドレスは8の倍数。 になります。 チェックボックスをONにした状態では、どのデータ型でもアドレスを1バイトずつ変化させて検索します。 「アドレスはデータサイズの倍数に限定しない」と表現しても良いかもしれません。 チェックボックスをONにした状態だと、検索に時間がかかります。 ■「検索方法・条件」タブ 検索方法およびその条件を指定します。 絞り込み検索するごとに、検索方法を変更することもできます。 入力欄できる値は整数のみです。先頭に0xを付けると、16進数で入力できます。 4バイト整数で表現できないような、大きすぎる値を入力したときの動作は未確認です。 「現在値」検索 ターゲットメモリを記憶していない状態でも検索できます。 右側の入力数値との比較結果だけを条件として検索することもできますし、左右両方に数値を入力して、ある範囲内の数値を検索することもできます。 「大小」検索 ターゲットメモリを記憶したときの値と、現在の値との比較結果を条件として検索します。 「差分」検索 ターゲットメモリを記憶したときの値と、現在の値との差を条件として検索します。 「倍数」検索 内部の数値を60で割り算したり1000で割り算した結果を表示しているような数値の検索を試みます。 どんな数値で割り算しているか不明でも検索できます。 割り算だけでは無く、掛け算している数値の検索も可能です。 整数しか入力できませんので、表示値が小数の場合には10倍や100倍等した入力で代用して下さい。 「パーセント」検索 ターゲットメモリを記憶したときの値を100%としたとき、現在の値が何%以上何%以下かを条件として検索します。 上限と下限の両方を入力する必要があります。 ■「ターゲットメモリ(再)記憶」 ターゲットプロセスの現在のメモリの内容を取得して、後で検索の比較条件として使用する為に、ツール内のメモリに保存しておきます。 「検索開始アドレス」「検索終了アドレス」の範囲内のアドレスが対象です。 対象となるメモリは、読み書き可能な領域のみです。書き込み不可の領域は対象外です。 消費メモリ量は、ターゲットプロセスの状態に依存します。 ここで保存されたメモリは、全ての検索データ型や、現在値検索以外の検索方法で共同利用されます。 また、解放される前に再びこのボタンを押すと、古い保存内容は解放されます。 ■「ターゲットメモリ記憶領域解放」 「ターゲットメモリ(再)記憶」で保存しておいたメモリを解放します。 再び「ターゲットメモリ(再)記憶」ボタンを押すまでの間は、現在値検索以外の検索方法は使用できなくなります。 ■「検索」 上で指定した「検索データ型」と「検索方法・条件」に従って検索を実行します。 2回目以降の検索は、ボタンの表記が「絞り込み検索」に変化します。 初回検索は「検索開始アドレス」「検索終了アドレス」の範囲内のアドレスを対象にして、条件に合うものを検索結果とします。 2回目以降の検索は、前回の検索結果のアドレスを再び検索して、条件に合わないものを検索結果から除外します。 検索結果はウィンドウ右側に表示されます。 検索結果は、検索データ型ごとに異なりますが、それぞれが全ての検索方法で共同利用されます。 検索中は一切の操作ができません。検索中止もできません。 ■「検索結果消去」 検索結果を全て消去して、未検索の状態に戻します。 再び「検索」ボタンを押して結果が表示されるまでの間は、簡易書き込み機能や簡易ダンプ機能は使用できなくなります。 ウィンドウ右側 未検索の状態では使用できません。 ■「検索結果」 一番上に、データ型の略称と、そのデータ型の検索結果の件数が表示されます。 クリックすることで、データ型の切り替えができます。データ型の切り替えは「簡易書き込み機能」「簡易ダンプ機能」にも影響します。 そのすぐ下の「アラインメントに従わないアドレスも表示する」は、「アラインメントに従わないアドレスも検索対象にする」をOFFにしている場合や、1バイト整数の場合には意味を持ちません。 その下の左寄りの欄には、検索結果のアドレス一覧が表示されます。アドレスをクリックすると、そのアドレス・そのアドレスの記憶時の値・そのアドレスの現在の値が「簡易書き込み機能」に反映されます。アドレスをダブルクリックすると、簡易ダンプ欄にアドレスを反映してダンプされます。 ■「簡易書き込み機能」グループ 「アドレス」は16進数で入力します。 「現在の値」に入力できる値は整数のみです。先頭に0xを付けると、16進数で入力できます。 「リロード」を押すと、そのアドレスの記憶時の値・そのアドレスの現在の値が表示されます。記憶されていない場合や、現在のメモリから読み取りできなかった場合にはそれぞれの値の欄に何も表示しません。エラーは出しません。 また、「アドレス」に入力後にフォーカスを移動しても、「リロード」を押すのと同様の結果になります。 「書き込み」を押すと、アドレスに「現在の値」を書き込みます。現在の値の入力値がデータ型の範囲を超える場合でもエラーは出しません。適当に処理して書き込んでしまいます。書き込み自体ができなかった場合にはエラーを出します。 表示内容の自動更新機能はありません。 ■「簡易ダンプ機能」グループ 「使用する」にチェックを入れないとダンプしませんので、以下の説明は意味を持ちません。 「16進」は、浮動小数点数の場合には意味を持ちません。 「アドレス」は16進数で入力します。入力後にフォーカスを移動すると、ダンプします。 「アドレス増分」に入力できる値は整数のみです。先頭に0xを付けると、16進数で入力できます。入力後にフォーカスを移動すると、ダンプします。マイナスの数値も指定できます。 「出力行数」は10進数で入力します。入力後にフォーカスを移動すると、ダンプします。大きい数値を入力すると、ダンプに時間がかかります。 「1行上」を押すと、アドレスからアドレス増分を1回マイナスした後、ダンプします。 「1行下」を押すと、アドレスにアドレス増分を1回プラスした後、ダンプします。 現在のメモリから読み取りできなかった場合にはアドレスのみを表示します。エラーは出しません。 ダンプ結果をクリックすると、そのアドレス・そのアドレスの記憶時の値・そのアドレスの現在の値が「簡易書き込み機能」に反映されます。 表示内容の自動更新機能はありません。 ===その他=== ■倍数検索を活用できる例 とあるゲームのセガサターン版では、キャラクタのパラメータの表示上の数値は0〜999ですが、内部では0〜9999で記憶していて、10で割って小数点以下を切り捨てた結果を表示しているようです。しかもビッグエンディアンなので、10で割っていることが分かっていたとしても、普通のツールでは簡単に検索できません。 しかし、倍数検索を使用すれば、内部形式が不明でも検索できます。1件に絞り込むことはできなくても、検索結果が数件になった時点でテスト的に書き込みを行えば正しいアドレスが判明します。 (セガサターンのBIOSが無くても動かせるエミュレータがありますので、心当たりのある方は自分自身で試してみて下さい。) とあるWindows用のゲームでは、残り時間を分と秒で表示していますが、内部ではミリ秒単位で記憶しているようです。 こちらは値の減少や増加を条件として検索することも可能でしょうが、倍数検索を使用すれば効率良く検索できます。 また逆に、表示上の数値を8倍して記憶しているようなデータも検索可能です。 ■倍数検索とパーセント検索の注意点 メモリ上の数値が0およびマイナスの場合は検索対象外となります。 切り捨て/四捨五入/切り上げの全てを共通の計算方法で判定できるようにしているため、条件に一致しないアドレスも検索結果に含まれることがあります。 入力数値が2以上でないと検索できません。 記憶時と初回検索時とでは表示値を大きく変化させることをお勧めします。少なくとも2以上の差を付けて下さい。 普通の検索では「表示される値が最大で100だから、1バイトのデータの検索で良い」などと言えるのですが、倍数検索とパーセント検索では通用しません。 本当のパラメータが4バイト整数の場合に、上半分を2バイト整数として解釈した場合でも検索条件に一致することが多いでしょう。 逆に、本当のパラメータが2バイト整数の場合に、隣接した2バイトと合わせて4バイト整数として解釈した場合でも検索条件に一致することが多いでしょう。 パーセント検索で上限と下限に同じ数値、例えば50を入力した場合、記憶時のちょうど半分の数値だけが検索結果に表示されるわけではありません。この場合は、倍数検索で現在の表示値に50、記憶時の表示値に100を入力したのと同じ検索結果になります。 (パーセント検索の仕様は今後変更される可能性があります。) ■アラインメント Windows用アプリケーションや、CPUが32ビット以上のマシンのエミュレータではほとんどの場合、「アラインメントに従わないアドレスも検索対象にする」にチェックを入れなくても良いと思います。 しかし、CPUが8ビットのマシンのエミュレータで2バイト整数を検索する場合は、「アラインメントに従わないアドレスも検索対象にする」にチェックを入れた時だけ検索できるデータも少なくないと思います。 ■「検索開始アドレス」「検索終了アドレス」 初期値のアドレスで見つからない場合は検索終了アドレスを大きくしたり、ターゲットプロセスのメモリマップがある程度判明している場合は検索範囲をそれに合わせて狭くしたりしてみて下さい。 ■エミュレータ このツールはエミュレータに対して使用することも想定しています。 しかし、エミュレータの場合はエミュレーション対象マシンの普通のRAMだけでなく、BIOSやVRAM、ものによっては動的コンパイル用の領域も含めて、このツールの検索対象になってしまう可能性があります。 他のツールを利用して、エミュレータのメモリマップを調べて、それに合わせた「検索開始アドレス」「検索終了アドレス」を指定すれば効率良く検索できるかもしれません。 ■多重起動可能 このツールは多重起動を制限していません。 複数のパラメータを同時に検索したい場合は、多重起動で対応して下さい。 ただし、メモリの消費量には注意して下さい。 多重起動したウィンドウそれぞれが、「ターゲットメモリ(再)記憶」の内容および「検索結果」を独自に保持しますので。 ■簡易ダンプ機能 単なるメモリダンプであれば、「アドレス増分」はデータ型のサイズと同じで良いでしょう。 たとえばRPGで5人の仲間がいて、「+34hごとに次のキャラクターのパラメータ」のようなデータ配置の場合、アドレス増分に0x34を指定すれば、複数のキャラクターの経験値を一覧表示することもできます。 また、ダンプ結果の表示欄が狭くて行数が少ないと思った場合には、ウィンドウのサイズを変更して下さい。 ■注意点 途中でターゲットプロセスが終了したときの動作は未確認です。 メモリが足りない時の動作は未確認です。 二進化十進数(BCD、Binary-coded decimal)のデータには対応していません。 3バイト整数、独自形式の数値、ビット単位のフラグ・ビットフィールド、任意長のデータ、文字列の検索等には対応していません。 ■その他 ツールの名称は、実在の人物の名前や行動とは一切関係ありません。物語の登場人物とも関係ありません。 作者の名称は、実在のゲーム(の登場キャラクター)とは関係あります。 ツールの紹介文や説明書には登録商標等の記述も含まれますが、明記するのは面倒なので省略します。 ■配布場所(2009年1月29日現在) http://milfa.akari-house.net/sachiko_a.html (ツールの配布場所) http://milfa.akari-house.net/ (トップページ) ■更新履歴 ・2009/01/29 倍数検索とパーセント検索の精度向上。ただし、速度は低下。 検索結果をダブルクリックすると、簡易ダンプ欄にアドレスを反映してダンプするようにした。 ウィンドウタイトル変更機能を追加。 フォント変更ボタンを追加。 説明の追記および修正。 ・2009/01/14 多くの環境で、検索条件の不等号の表示と実際の動作が異なっていた不具合を修正。 Windows2000で、長いファイル名や日本語のファイル名のプロセス等がターゲットプロセス選択リストに表示されない不具合を修正。 Windows2000以外でも、ターゲットプロセス選択リストに表示されるプロセスが増えたはず。 ・2009/01/11 初公開