「リスト抽出」とは、名前の通り「メモリから文字列リストを抽出する」機能のことです。前述した一般的なファイル指定は、事前にファイルとしてデータ(文字列)を記述しておく必要があり、また実行時にその内容が変わることはありません。しかし、メモリから文字列を抽出し、リスト化する機能があったとすれば、どうでしょう? そうです、実行中に内容が変わる文字列であっても、このリスト抽出機能を用いれば、その時その時の状態を反映したリストを作成・利用できるのです。平たく言えば、アドレスネーミング機能の複数行版です。
ファイル指定オプションすべてに使用でき、頭にアンダーバー(_)を入れることで、抽出リスト機能と判断します。
書式は以下の様になります。
_mem/ アドレス/ 1行の最大文字数/ 行数/ ステップサイズ/ 終端バイト列/ エラー時の代替え文字列
_mem/ アドレス/ サイズ/ 行数/ ステップサイズ/ num/ エラー時の代替え文字列
_mem/ アドレス/ サイズ/ 行数/ ステップサイズ/ num_big_e/ エラー時の代替え文字列
|
です。","区切りではなく、"/"区切りであることにも注意して下さい。
アドレス | 読み込む開始アドレスです。詳しいアドレスの書き方は、《A-アドレス》を参照。 |
1行の最大文字数 | リスト化する関係上、1行が最大何文字で構成されるかを指定する必要があります。その最大文字数を、バイト単位で指定します。 |
行数 | リスト化した際の行数が幾つになるかを指定します。これにより、読み込まれる合計サイズは「1行の最大文字数×行数」となります。 |
ステップサイズ | 各行データの間隔をバイト単位で指定します。データは必ずしも隣り合わせで連続しているとは限りませんので、一定サイズの読み飛ばしも可能にしてあります。当然、「1行の最大文字数」と同じか、それより大きな値を指定します。仮にステップサイズが0x10のとき、1行目のデータを0x400000から所得したとすれば、2行目のデータは0x400010から所得します。 |
終端バイト列 | 多くの文字列処理では、「文字列はここで終わり」という印しに、NULL文字(16進数で00)を使います。これらの終端符号を、バイト列で指定します。バイト列の詳細は、《B-バイト列》を参照。省略した場合は、NULL文字(00)と解釈します。 |
エラー時の代替え文字列 | 値をメモリから読み込む関係上、プロセスを起動していないなどの原因で、値を所得できない場合があります。その際に利用する文字列を、このオプションで指定します。(結果的に、返されるリストは、この「エラー時の代替え文字列」1行だけのリストとなります。) |
num num_big_e | メモリから読みとれる値は、何も文字列ばかりではありません。メモリ中のデータを数値として抽出し、文字列化してリストに再構成することもできます。その機能を使う場合に、「num」あるいは「num_big_e」キーワードを「終端バイト列」オプションに指定します。なお、「num」を指定した場合は、メモリから読み込んだデータをそのまま文字列化しますが、「num_big_e」を指定した場合は、いったんエンディアンを反転(ビッグエンディアン化)してから文字列化します。 |
サイズ | 「サイズ」オプションは「1行の最大文字数」オプションと大して意味は変わりませんが、読み出す数値サイズを1〜4バイトの範囲で指定します。 |
まとめとして、いくつかのパターンでリスト抽出を用いた項目例を書いておきます。
[subject]武器:list, 0x400000,_mem/ 0x410000/ 15/ 20/ 15/ 00/Read Error!, 0, 1
[subject]ステータス:bitlist, 0x420000,_mem/ 0x450000/ 31/ 8/ 31/ 00/Read Error!, 1
[subject]武器一覧:b_list, 0x500000,_mem/ 0x510000/ 31/ 20/ 31/ 00/Read Error!,0, 1, _mem/ 0x520000/ 4/ 20/ 4/ num/Read Error!, offset
//////////////////// ↑実際は一行で書きます
|
それなりに負荷がかかりますので、「手打ちが面倒だから」という理由では使用しない方がよいかと思います(^^;。ただし、「エラー時の代替え文字列」の説明で述べた様に、メモリから値を所得できない場合の対応も考えて利用して下さいね。
|
|