Copyright © 2001-2017 Janus

ROM化支援バイナリエディタ - xedit -

目次

はじめに

このプログラムはフリーソフトのバイナリエディタです。 元々、他プログラムのバイナリエディット部のデバッグルーチンでしたが、 意外と使えるので機能追加した形で公開しています。

特徴

アーカイブ内容

ファイル名 内容
xedit.exe ver.1 実行ファイル(final:1.84)
xedit2.exe ver.2 実行ファイル
xedit.html ヘルプファイル(このファイル)
style.css ヘルプファイル用スタイルシート
bmp.csv 構造体解析用定義サンプルファイル1(bmpファイルヘッダ定義)
pci.csv 構造体解析用定義サンプルファイル2(PCIコンフィグレジスタ定義)
dump.lua Luaスクリプトサンプルファイル1
fill.lua Luaスクリプトサンプルファイル2
patch.lua Luaスクリプトサンプルファイル3
sum.lua Luaスクリプトサンプルファイル4

ページ処理

巨大なファイルの中身を閲覧する処理方式です。 ファイルをページと呼ばれる単位で読み込みます。 挿入、削除等のデータ移動を伴う編集は行えませんが、パッチによる部分書き換えが可能です。 検索はページ内で処理されます。 「読み込み専用(パッチ編集)」で開くとページ処理を行います。

インストール方法

  1. 任意のフォルダーにアーカイブ内容を展開します。(xedit.exe 以外のアーカイブ内容は削除しても動作に問題ありません)
  2. 必要に応じ xedit.exe へのショートカットを作成します。
xedit.exe を実行すると実行ファイルと同じフォルダに ini ファイルを作成します。 実行ファイルは書き込み権限のあるフォルダに展開して下さい。

アンインストール方法

  1. インストール時に展開したファイルを全て削除します。
  2. 作成された xedit.ini ファイルを削除します。(ver.1 はレジストリを使用していません。)

操作説明

カーソル移動

ページ移動

ページ単位での読み込みが行われた場合、

データのキーボード入力

通常は 0〜9 及び a〜f(大文字又は小文字)の半角文字が入力可能です。 IMEがオンの場合、またはASCII部にカーソルがある場合は文字コードがそのまま入力されます。

右クリックで表示されるメニューの「貼り付け」を選択することで、クリップボードからデータを入力することも可能です。 [Ctrl+V]でも同様の貼り付け動作が行えます。 この際、クリップボード内のデータは以下の条件を満たしている必要があります。 (条件を満たしていない場合、思い通りの取り込み結果にならない場合があります)
  1. テキストデータであること。
  2. 16進数値半角文字列であること。(0x表記は可能)
テキストデータを可能な限り数値変換しデータとして取り込みます。 ただし、IMEがオンの場合、またはASCII部にカーソルがある場合は表示モードに応じた文字列に変換後、数値変換せずに貼り付けます。 (表示モードがASCII, グラデーションの場合は無変換)

貼り付け動作は全て挿入となります。 選択状態での貼り付け動作は選択データを削除後、データを挿入します。

データの挿入

編集は任意の位置から可能です。 空白欄に数値を入力すると、新規データとして記録します。 この際、編集済み最終位置から編集位置まで「画面設定」-「埋め込みデータ」で設定した値が自動で挿入されます。 既存データ上で数値を入力すると、データを上書きします。

既にデータが存在する場所にデータを挿入したい場合は、挿入したい位置にカーソルを移動し、[SPACE]キーを入力します。 「画面設定」-「埋め込みデータ」で設定した値が入力され、カーソル位置以降のデータが後方にシフトされます。 または、[Insert]キーを押して挿入モードに切り替えます。

挿入モードではカーソルの横の長さが通常の1/4になります。 この状態で上位バイト位置にカーソルがある場合にデータを入力すると「画面設定」-「埋め込みデータ」で設定した値が挿入され、 更に、入力したデータで編集されます。再度、[Insert]キーを押すと上書きモードに切り替わります。

データのポイント編集

それぞれ 0 〜 255 の範囲で演算されます

データファイルからの入出力

ファイル内容を以下のいずれかの方法でファイル編集が可能です。 編集内容を以下のいずれかの方法でファイルに保存することが出来ます。

ウインドウへのファイルドロップ

ウインドウに編集対象ファイルをドロップするとファイル種別を自動で判別して開きます。

編集メニュー

編集のアンドゥ・リドゥ

選択編集

範囲選択はマウスカーソルまたは[Shift+↑↓→←]キーにより行います。 また、「選択範囲の指定」メニュー、マーク上での「Ctrl+F2」キーでも選択可能です。 選択すると選択部分のデータは反転表示されます。

選択状態では

検索メニュー

これらの機能は全てページ内で有効となります。

検索・置換・アドレスジャンプ

[Ctrl+F],[Ctrl+H],[F5]キーで検索用ダイアログが表示されます。

機能 処理内容
アドレスジャンプ 指定アドレスにカーソルを移動します。 アドレスの前に '+', '-' を付加するとカレント位置から相対移動します。 アドレスには計算式を記述できます。
データ検索 カーソル位置からデータを検索します。 継続検索は後方は[F3]キー又は[Ctrl+PgDn]キーで、 前方は[Shift+F3]キー又は[Ctrl+PgUp]キーで可能です。
データ置換 カーソル位置から検索データを置換データで置き換えます。

データを選択中に継続検索を行うと選択データを検索データとして検索します。 検索結果の数が ini ファイルの SelLimit 以下の場合、ハイライト表示を行います。 SelLimit=0 の場合、この制限を用いず、全ての結果をハイライト表示します。 ただし、マシンによっては処理が重たくなるので環境に応じ SelLimit を変更して下さい。 SelLimit の変更は xedit 終了後に ini ファイルを直接編集してください。

ハイライト表示は [ESC] キーで解除できます。

拡張ジャンプ

カーソル位置のデータを元に分岐先を決定します。 アドレスの前に '+', '-' を付加するとカレント位置から相対移動します。 アドレスには計算式を記述できます。

ジャンプ履歴

ジャンプアドレスの履歴を参照出来ます。

マーク

[Ctrl+M]キーで選択範囲をマーク(別色表示)することが出来ます。 [Shif+F2]キー又は[F2]キーでマーキングした場所にカーソル移動します。 マーク範囲上にカーソルがある場合、[Ctrl+F2]キーでマーク範囲を選択します。 マーク情報は「編集」-「マーク」-「マークの登録/解除」メニューで編集可能です。

ステータスバー & 解析パレット

ステータスバー

ステータスバーの表示内容をカスタマイズすることが可能です。 カスタマイズするには ini ファイルの StatusBar1, StatusBar2 を直接書き換えます。 StatusBar1 は選択状態の表示内容、StatusBar2 は通常時の表示内容となります。 表示内容には下記置換キーワードが使用できます。 置換キーワードは '<' と '>' で括ってください。 @を挟んで左ブロックと右ブロックを指定して下さい。

sel_start選択開始アドレス
sel_end選択終了アドレス
sel_size選択サイズ
addrカーソルアドレス
addr_offsetページ内カーソルアドレス
addr_pageページアドレス
sizeデータサイズ
型名称カーソル位置データ
md編集モード(挿入/上書き)

置換キーワード型名称には構造体解析で指定可能な型名称を指定します。

例) 16進数の4バイト幅でビッグエンディアンを表示する
<DWORD:big>

解析パレット

ステータスバーで表示可能な内容や型による解析をリスト形式で表示します。 表示形式は構造体解析で使用する表示形式を指定します。 ただしステータスバーの時と異なりキーワードを '<', '>' で括る必要はありません。 解析パレットの型に対する「値」列をダブルクリックすることで、対象のデータを編集可能です。 リスト上部のアイコンで表示内容をカスタマイズ可能です。

ツールメニュー

Luaスクリプト

Luaスクリプトを実行します。

開始スクリプトファイルを選択後、実行します。
停止Luaスクリプト動作を停止させます。

フィルデータ

設定した範囲内を指定データで埋め尽くします。

固定値指定したデータで埋め尽くします。指定したデータ長から繰り返しデータ長を決定します。
ランダム値ランダムなデータ値で埋め尽くします。
インクリメント値指定したデータに 1 を加算しながら埋め尽くします。
デクリメント値指定したデータに 1 を減算しながら埋め尽くします。

数値解析

カーソル位置からエンディアンを考慮した数値解析を行います。 2 バイト以上選択されている場合は選択位置から数値解析を行います。 ステータスバーや解析パレットの内容をコピーしたい場合はこの機能を利用します。

サム/ハッシュ値の計算, CRC計算

選択されているデータを対象に計算します。

サム計算1, 2, 4バイト単位での合計値, XOR値を算出します。 同時に、1 の補数及び 2 の補数も算出します。
ハッシュ計算MD5, SHA-1, SHA-256でハッシュ値を算出します。
CRC計算各パラメータを設定しCRCを算出します。

CRCパラメータのデフォルトには下記があります。

TYPEBitTrunPoly.IniRem.FinXORRefInRefRem
CRC-880x070x000x00YesYes
CRC-16160x80050x00000x0000YesYes
CRC-16/FILE160x10210xffff0x0000YesYes
CRC-16/CCITT160x10210xffff0x0000NoNo
CRC-16/XMODEM160x84080x00000x0000YesYes
CRC-16/USB160x80050xffff0xffffYesYes
CRC-16/MODBUS160x80050xffff0x0000YesYes
CRC-32320x04c11db70xffffffff0xffffffffYesYes
CRC-32C320x1edc6f410xffffffff0xffffffffYesYes

並び替え

選択されているデータの並びをマップにしたがって交換します。 部分的なエンディアン変換等の目的で利用可能です。

データを比較

現在編集中のデータと他ウインドウのデータを比較します。 選択状態の場合、選択範囲内で比較します。 比較可能な他ウインドウが複数ある場合、選択画面を表示します。

比較結果はハイライト表示します。 ハイライト表示の上限は ini ファイルの DiffLimit で変更可能です。 DiffLimit=0 とすると上限を設定しません。

ハイライト表示は[ESC]キーで解除できます。 [Shif+F2]キー又は[F2]キーで不一致箇所にカーソル移動します。

パッチ

読み込み専用(パッチ編集)で開いた場合でデータを選択状態にすると使用できます。 選択部分のコピーがダイアログに展開され、データを編集できます。 ダイアログで「OK」を選ぶと直接ファイル内容を書き換えます。アンドゥ操作は出来ません。 予めバックアップを作成しておくことをお奨めします。 パッチ処理用ダイアログ上での編集は挿入、削除、アンドゥ等の操作が可能です。

オプション

基本表示に関する設定が可能です
表示色の設定が可能です
詳細デバッグ用です
その他各ディレクトリの初期位置を設定可能です
プラグイン拡張機能の追加選択が可能です
LuaLuaスクリプトをキーボードに割り当てることが可能です

引数オプション

実行コマンドは以下となります。
xedit.exe [options] 編集ファイル
options には下記を指定することが可能です。

-ini iniファイル 使用する ini ファイルを指定します。指定しない場合は xedit.exe と同じディレクトリ下の xedit.ini を使用します。 (実行ファイル名が xedit の場合)
-read 開始時の問い合わせ表示を行わず、読み込み専用(パッチ編集)で開きます。
-edit 開始時の問い合わせ表示を行わず、編集可能な状態で開きます。
-noauto 編集対象ファイルを開く際、ファイル種別の自動判別を行いません。

構造体解析

編集データを構造体に割り当てた状態で解析表示・編集することが可能です。 (構造体解析時は処理速度が大幅に落ちます。) 定義ファイルはカンマ区切りで記述します。

カンマ区切りによる記述

下記構文となります。
構造体名称,+
型名称,変数名[,表示形式]
例えば C 言語で記述する以下の構造体は
struct Sample
{
    WORD vID;
    WORD dID;
    WORD Value;
};
次の様になります。
Sample,+
WORD,vID
WORD,dID
WORD,Value
構造体名称にはスペースを含む名前の指定が可能です。 型名称には「構造体解析の型名称」が指定できます。 変数名には ':' に続きビットアクセス幅を指定可能です。
BYTE,Status.A:2
BYTE,Status.B:3
BYTE,Status.C:3
表示形式には書式やエンディアンの指定が可能です。 複数の書式を設定する場合は ':' で区切ります。 エンディアンの指定がない場合はリトルエンディアンとして表示します。

bin2進数表示
oct8進数表示
dec10進数符号なし表示
hex16進数表示
int10進数符号付き表示
littleリトルエンディアン表示
bigビッグエンディアン表示
数値表示幅

先程の構造体をビッグエンディアンで解析させる場合は次の様になります。
Sample,+
WORD,vID,hex:big
WORD,dID,hex:big
WORD,Value,big

構造体解析の型名称

構造体解析には以下の型名称が使用できます。

コマンドウインドウ

CUIによりコマンド入力が可能です。 使用可能なコマンドは下記となります。
cmd are:
	!		外部コマンドの実行
	help	このメッセージを表示
	calc	引数を計算する
	lua		Luaスクリプトファイルを実行
	exe		引数をLuaスクリプトとして実行
	jump	絶対アドレスジャンプ
	jump+	相対アドレスジャンプ
	find	データを検索
	findstr	文字列を検索
	select	選択範囲を指定
コマンドウインドウでは、Luaスクリプトによるバイナリデータの編集も可能です。 CUI上部のアイコンから操作してください。 Luaスクリプトはグローバルテーブル変数 arg にて自身のスクリプトファイルパス名と引数情報が参照可能です。

ROM化支援

ファイル選択ダイアログで「ファイルの種類」に形式を選択することでモトローラSフォーマットやインテルHEXフォーマットの (ROM化ファイルと呼ぶことにします)ファイル読み込み/書き込みを行うことが出来ます。

読み込み

両フォーマットとも ROM化を目的としたデータファイルでテキストファイルです。 1行が1レコードで成り立っており1レコードには「ロードアドレス:書き込みデータ」等の情報が記述されています。 (ロードアドレスとは ROMに書き込むアドレスのことです) xedit では各フォーマットに応じたレコードの解析を行いエディット画面に取り込みます。

ROM化ファイルは必ずしもロードアドレスが 0 番地から始まるとは限りません。 また、すべてのアドレスにデータが埋まるわけでもありません。 よって、xedit では歯抜け部分に「画面設定」-「埋め込みデータ」で指定したバイトデータで埋めます。

また、エラーレコードを発見した場合は、そのレコードの読み込みを無視して次のレコードを継続処理します。 ロードアドレスが重複した記述の場合には後方レコードで情報が上書きされます。

ini ファイルの RomAddrMaskRead を 1 にすると編集可能範囲外のアドレスを検出した場合、 編集可能範囲内にアドレスを変更し、強制的に読み込みます。(保存すると元のデータは失われます)

ini ファイルの RomForceRead を 1 にするとアドレス不正検出でも読み込みを継続します。 (保存すると元のデータは失われます)

読み込みが完了すると、読み込み範囲をハイライト表示します。 ハイライト表示の上限は ini ファイルの DiffLimit で変更可能です。(比較時のハイライト設定と共有) また、ハイライト部分をマークとして記憶することが可能です。 読み込み範囲のハイライト表示は編集または[ESC]キーを押すことで解除出来ます。

保存

1レコードにデータを 0x10 バイト区切りとして出力します。 各フォーマットに応じた形式で出力するのでそのままROM化データとして使用可能です。

ただし、1レコードが全て「埋め込みデータ」の場合は保存対象レコードから外す事が出来ます。 これは読み込み時に歯抜け部分として挿入したデータを保存対象外とする事でROM化ファイルのサイズを小さく出来ます。 保存時のオプションで選択してください。

マークを記憶または編集している場合はマーク部分のみを出力することが可能です。

上記理由からxedit以外で作成したROM化ファイルを「読み込み」-「保存」を行っても元のファイルと同じテキストを得られる可能性は低いですが、 ROM化においては同一データとなります。

変換

読み込み形式にモトローラSフォーマット(又はインテルHEXフォーマット)を選択し、 書き込む形式にインテルHEXフォーマット(又はモトローラSフォーマット)にすればフォーマット変換として利用することも可能です。

動作環境

配布条件等

著作権・免責等

License for Lua 5.0 and later versions

    Copyright(c) 1994-2011 Lua.org, PUC-Rio.

    Permission is hereby granted, free of charge, to any person obtaining a
    copy of this software and associated documentation files (the "Software"),
    to deal in the Software without restriction, including without limitation
    the rights to use, copy, modify, merge, publish, distribute, sublicense,
    and/or sell copies of the Software, and to permit persons to whom the
    Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included
    in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    DEALINGS IN THE SOFTWARE.

変更履歴

2.84 2017/07/07

1.83 2017/06/24

1.82 2017/06/16

1.81 2016/09/10

1.80 2016/06/15

1.79 2016/02/16