ヘキサエディタ「へきさにゃん」
ヘキサエディタ「へきさにゃん」 目次
●概要と注意事項●参考スクリーンショット
●他のソフトウェアとの連携について
●オリジナル版ヘルプ
●改造版追加ヘルプ
●「うさみみハリケーン」同梱版追加ヘルプ
●開発補記
概要と注意事項
この当ソフトウェア『うさみみハリケーン』補助ツール(同梱HekisaNyan.exe)は、バイナリファイルの編集を行う、ヘキサエディタ(ヘキサデシマルエディタ・16進エディタ、日本での通称は「バイナリエディタ」)です。「へきさにゃん」は、1999年に岩本一樹氏が公開したヘキサエディタ「Binary maid」(以下「オリジナル」)をベースにさせていただきました。「Binary maid」はかつてソースコードが公開されており、ソースコードの改変に制約はありません。さらに、K.Takata氏が2009年に公開した「Binary maid 改造版」のソースコードも取り込ませていただきました。併せて、1990年代の日本製ヘキサエディタの状況を知るために、ヘキサエディタ「BZ」バージョン0.95(1996年公開)のソースコードも参考にさせていただきました。なお、オリジナルおよび改造版が公開されてからの経年を考慮し、明確に区別するために名称を変更しています。
■著作権情報
Binary maid for Windows version 1.8.7
copyright (c) 1998-1999 岩本一樹
copyright (c) 2008-2009 K.Takata
へきさにゃん Version 1.8.7.2
Copyright © 2024 Luca @Digital Travesia
■機能概要と動作環境
機能概要(オリジナルでの説明をそのまま転記、「うさみみハリケーン」同梱版での仕様変更あり)
1)数値入力(16進数、8進数、2進数、符号なし10進数、符号付き10進数)
2)文字表示/入力(シフトJIS、UNICODE対応)
3)マルチバイト入力機能(基数、バイト数、インテル/モトローラー選択)
4)構造体の登録/編集
5)アドレス表記設定(16進、10進、8進)
6)編集(切り取り、コピー、貼り付け、削除)
7)検索/置換
8)編集履歴(元に戻す、やり直し)
9)印刷
10)表示色の設定が可能
11)イメージビュー
12)拡張子ごとの環境設定(基数、アドレス、保存、色、フォント)
13)MDI、モダンユーザーインターフェイス採用
「うさみみハリケーン」のヘルプ(UsaMimi.chmとオンラインヘルプ)内に、オリジナルと改造版のヘルプを取り込んでいますので、機能および操作方法等についてはこのヘルプを参照願います。なお、オリジナルのヘルプ「BMAID.HLP」は古いヘルプ形式のため、Windows 11など新しいWindowsの標準機能では表示できなくなりました。すでにオリジナルが公開されていないことを含めた諸般の事情により、オリジナルと改造版のヘルプの操作関連や改造関連に係る記述部分を転載しています。
動作環境はWindows 7以降です。オリジナルの動作環境はWindows 95以降ですが、ユーザーインターフェイス特権の分離(UIPI)といった、新しいWindows OSで実装されたセキュリティ関連機能へ対応したことや、一部機能をWindows 7以降に最適化したこと等により、動作環境はWindows 7以降となりました。
「へきさにゃん」は、オリジナルのレジストリ書き込み処理を回避することで、ポータブルアプリケーション化しています。これは、「うさみみハリケーン」および同梱ソフトウェア群は、ポータブルアプリケーションを基本設計としているためです。また、他の同梱ソフトウェアと同様に、USBメモリ内でのインストールと実行も可能です。使用にあたりランタイムや他のソフトウェアは必要ありません。
■注意事項
「へきさにゃん」および他のヘキサエディタ使用時には、想定外の動作あるいは誤操作等による、意図しないファイル書き換えが生じる可能性があります。重要なファイルの操作時には、予めバックアップを作成しておくことを強くお勧めします。
「へきさにゃん」で編集中のファイルを他のヘキサエディタ等で書き換えるのは、「へきさにゃん」側で編集結果を保存した後に行ってください。編集中のファイルを外部から書き換えられる事態は想定していません。
「へきさにゃん」および多くのヘキサエディタで標準設定の配色となっている、黒文字に白背景は、コントラスト比が高く、目への負担を考慮すると長時間の使用には適していません。そのため、ヘキサエディタを日常的に使用される方は、白文字に黒背景への設定変更をお勧めします。配色の変更は、メニュー「オプション」→「表示関連プロパティ」で行えます。なお、白背景を淡色背景に変更、あるいは黒文字をややグレー文字に変更して、コントラスト比を下げるという対処方法もあります。
オリジナルは1999年に公開されており、公開当時に需要がかなり少なかった、数ギガバイトを超える巨大ファイルへの対応は行われていません(「へきさにゃん」の編集可能上限は約1.74GBで環境依存あり)。さらに、ソフトウェア内部で主な文字列操作処理に使用する文字コードは、現在一般的なUnicode(UTF-16)ではなく、「Visual Studio 6.0」など当時の開発環境で標準だったWindows ANSI(≒ Shift_JIS)です。そのため、Windows ANSIでは表示できない、Unicodeで使用可能な記号や漢字などを含む文字列は適切に処理できません。この問題により、特にファイルパスの認識やクリップボード関連処理で不具合を生じることがあります。
「へきさにゃん」が1回に行う、貼り付け処理やその他の書き込み処理は、仕様上512KB程度がサイズ上限となります。一部の処理はそれ以上のサイズ(上限は約4MB)で書き込むことも可能ですが、アンドゥなど他の処理に悪影響を及ぼすため、書き込むサイズによっては警告を表示します。上記の仕様は、回数制限が無いアンドゥを実現することや、大きなサイズの書き込みやコピー・貼り付け処理は想定していないことが理由とみられます。また、仕様上、書き込み内容とシステムによるメモリ再確保の状況によっては、予期せずアンドゥで不具合が生じる可能性があるため、1度に250KBを超えるような貼り付けあるいは書き込みを行った場合は、アンドゥは行わないことをお勧めします。
上記のように古い仕様による制約はあるものの、現在において、高度なプログラム解析などではない、一般的なヘキサエディタの用途ならば対応可能なケースも多いと判断し、「うさみみハリケーン」に同梱しています。
参考スクリーンショット
・メイン画面・メイン画面(配色変更例)
・10進バイト表示(2進/8進バイト表示やオフセットの10進表示にも対応)
・MDI(Multiple Document Interface)による複数ファイルの同時表示例(単一ファイルの複数同時表示も可能)
・編集メニュー項目
・編集メニュー項目:数値入力で選択範囲を指定+演算+特殊コピー
他のソフトウェアとの連携について
「へきさにゃん」は、「うさみみハリケーン」の同梱ソフトウェア群あるいは、その他のソフトウェアとの併用を想定しているため、その併用で事足りる機能の実装や改良は極力行わない方針です。ちなみに、メニューの「編集」から、へきさにゃんで開いているファイル(群)をコマンドラインオプションで指定して、メニューに登録した他のソフトウェアを起動することが可能です。実際の併用例としては、以下のケースが挙げられます。
文字コード別の文字列抽出、既知の各種ファイル・データ抽出、バイナリデータの視覚化および、各種ハッシュ生成といったバイナリファイル操作は、同梱の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」での対処が可能です。また、バイナリファイル(群)への、正規表現を用いた検索すなわちGREPならば、「青い空を見上げればいつもそこに白い猫」の「YARAルール」を用いた検索で代用できます。同様に、いわゆる「ワイルドカード」を用いた、一部が不定値や長さ不明のバイト列の検索も、「YARAルール」を用いた検索で対処可能です。他にも、「青い空を見上げればいつもそこに白い猫」では、ファイルの結合やサイズ変更、タイムスタンプ変更、x86やx64等各種アーキテクチャ対応の逆アセンブラなど、いろいろな機能を実装していますので、併用をお勧めします。
2つのバイナリファイルの比較ならば、同梱の専用ツール「NekoBinDiff」が使用可能です。このバイナリファイル比較ツールでは、バイナリファイル内の同一オフセットでの不一致箇所に加え、挿入や削除されたバイト(列)の解析にも対応しています。また、「WinMerge」など、バイナリファイル対応の比較機能を持つツールを併用することもできます。
対象がWindowsで使用される実行ファイルすなわちPEファイルの場合は、同梱のPEダンパー兼PEエディタ「UMPE」や、同梱のリソース解析ツール「ResStrView」での解析・編集をお勧めします。
編集対象ファイルを含む、任意のファイルへの読み書きアクセスや名前変更等を行うプロセス(Windows上の実行単位)を監視したいならば、同梱のプロセスモニター「猫原喜雨」さんで対処可能です。なお、FindFirstChangeNotification関数やReadDirectoryChangesW関数によるファイル監視処理は、マルウェアによるAPIフック等を用いたファイル監視妨害に対処できないため、「へきさにゃん」には実装していません。
16進文字列をバイナリファイル化して保存するならば、「へきさにゃん」での特殊貼り付け操作(メニュー「編集」→「16進文字列をバイナリデータ化して貼り付け」)で新規ファイルに貼り付ける方法もありますが、同梱の多倍長整数演算・進数変換ソフト「UMECappend」でも可能です(「16進保存」ボタン)。逆に、バイナリファイルの16進バイト列から16進文字列を得るならば、「へきさにゃん」でのバイナリデータ16進表示部から選択範囲コピー操作で対応可能です。なお、上記の新規ファイルへの貼り付けは、すでに開いているファイルの一部をコピーして保存、つまり、既存ファイルのバイナリデータ16進表示部から必要個所をコピーして、新規ファイルに張り付けおよび編集するアプローチにも使用できます。このように、「へきさにゃん」で複数開いているウィンドウ間では、バイナリデータをそのままコピーまたは貼り付け可能です。
日本では「改造コード」とも呼ばれる、スクリプトを用いたバイナリファイルの書き換えは、「うさみみハリケーン」の姉妹ソフトである、「スペシャルねこまんま57号」が対応しています(メニュー「ファイル」→「簡易バイナリファイル書き換え」)。このバイナリファイル書き換え機能は、オフセットとバイナリデータを指定する「改造コード型」とは別に、差分を指定して書き換えを行う「差分書き換え型」の書式にも対応しています。さらに、変更前と変更後の2つのファイルを指定して、「差分書き換え型」のスクリプトを出力可能です。これらの書式に用いられる英数字や記号は必ず半角で記述してください。なお、『スペシャルねこまんま57号』はDEPの適用対象に設定すると起動できません。また、「スペシャルねこまんま57号」は2003年に最終リリースを行い、すでに開発とサポートは終了しています。
当ソフトウェアには、『スペシャルねこまんま57号』をその非対応OS、つまりWindows Vista以降で使用するための補助ツール「Neko57Helper.exe」を同梱していますので、この補助ツールの併用をお勧めします。
「スペシャルねこまんま57号」のバイナリファイル書き換え用改造コードの解説(ヘルプから転載)
●コード書式一覧 1.改造コード型 <注意事項> 複数コード実行時は、各コードを改行で区切ってください 複数コード中の改行のみの行は無視します 連続書き換え型コードでは、指定範囲サイズが書き換え内容として指定したバイナリデータのバイト数の倍数でない場合、指定範囲内で安全と考えられる上限まで書き替えます(範囲指定ミスの可能性があるため) 書き換え内容に指定するバイナリデータのサイズは1024バイトが上限です バイナリデータは必ず1バイトを半角英数2文字で指定してください(1→01等) コード中に余計なスペースがあるとエラーになります <書式> 010000-E703 →オフセット010000から2バイトを「E703」で書き替えます 0100>01FF-E703E7030001007EFFFFF80000000000 →オフセット0100から01FFを指定バイナリデータ「E703E7030001007EFFFFF80000000000」で埋めます 10$ねこまんま →オフセット10以降に文字列「ねこまんま」対応バイナリデータを書き込みます 0200>02FFxAA →オフセット0200から02FFを、1バイト毎に値AAhでXORして書き換えます 0200>02FFX12345678 →オフセット0200から02FFを、4バイト毎に値12345678hでXORして書き換えます ;コメント →セミコロン以降改行までをコメントと判断し無視します <使用例> ;環境フラグセット 0080-010300FFFF ;CG・回想モードフラグALLON 0100>01C7-01 01D0>01DF-FF 2.差分書き換え型 <注意事項> 複数コード実行時は、各コードを改行で区切ってください 複数コード中の改行のみの行は無視します 「FILENAME」での指定は無視します(書き換え対象ファイルを当ソフト実行ファイルと同じフォルダに配置させる必要が生じるため)。 オフセットは必ず8桁で指定してください コード中のコロンやスペースの位置は、以下の書式と厳密に比較します コード中に余計なスペースがあるとエラーになります <書式>以下では分かりやすいようにスペースをアンダーバーで表示しました 00002054:_74_EB →オフセット2054のバイナリデータが「74」ならば「EB」に書き換えます *コメント →アスタリスク以降改行までをコメントと判断し無視します <使用例> *Ver7.4用 FILENAME_Target.exe 00002054:_74_EB 000051AC:_55_C3 |
実行ファイルの実行時に動的に作成・表示される、動的生成メニュー項目やステータスバーなどの通常取得できない文字列は、同梱のボタン型ランチャー 「NekoLaunch」を使えば、標準設定のCtrl+Uキー押し下げで、カーソル直下の文字列あるいはオブジェクト外観画像をクリップボードにコピーすることができます。このような動的生成文字列は、上記の同梱リソース解析ツール「ResStrView」などでは取得できません。
編集対象ファイルの詳細な情報、例えば画像ファイルの標準的なExif情報などは、同梱の簡易エクスプローラー「Portable Explorer」で、各種メタデータ「拡張プロパティ」として取得および確認することができます。また、「Portable Explorer」は、各種ファイルのプレビュー表示や、画像ファイルへのOCR処理(Windowdsの機能の有効化が必要)にも対応しています。
構造体編集を行うならば、同機能に強みがある「AnalyzeBin」など日本人製作のツールが複数あるので、併用をお勧めします。
数GBを超える巨大なファイルへの対応は予定していません。現在では、数GBを超える巨大なファイルを頻繁に扱う分野であれば、たいてい解析・閲覧・編集・修復などを行う専用ツールが存在するためです。また、「青い空を見上げればいつもそこに白い猫」のファイル・データ抽出機能は仕様上、TB単位の巨大なファイルでも、オフセットを指定してバイナリデータのダンプ表示すなわち閲覧が可能です。さらに、数GBを超えるファイルに対応した日本製のヘキサエディタが、すでに複数公開されているという実状もあります。
オリジナル版ヘルプ(機能・操作関連箇所をそのまま転載、改造版や「うさみみハリケーン」同梱版での仕様変更あり)
o操作 基本的には一般的なエディタの操作方法と同じです。マウスの左クリックでキャレッ トが移動します。また左クリックしたままマウスを移動させると文字を選択できます。 右クリックでポップアップメニューが表示されます。 ・キャレットの移動 キャレット(白黒で点滅するバー)は下記のキー操作で移動させることができます。 ← 左に移動します。 → 右に移動します。 Ctrl+← 左の文字に移動します。 Ctrl+→ 右の文字に移動します。 ↑ 1行上に移動します。 ↓ 1行下に移動します。 Ctrl+↑ 1行上にスクロールします。 Ctrl+↓ 1行下にスクロールします。 PageUp 1ページ下に移動します。 pageDown 1ページ上に移動します。 Ctrl+PageUp ページの下に移動します。 Ctrl+PageDown ページの上に移動します。 Home 行の先頭に移動します。 End 行の末尾に移動します。 Ctrl+Home ファイルの先頭に移動します。 Ctrl+End ファイルの末尾に移動します。 行の先頭で←を押した場合、1つ上の行の末尾に移動します。 行の末尾で→を押した場合、1つ下の行の先頭に移動します。 ・選択 Shiftキーを押しながらキャレットを移動させると移動した範囲を選択できます。選択 された範囲は色が変わります。Escを押すか、Shiftキーを押さずにキャレットを移動さ せると文字の選択は解除されます。 文字が選択されている時に文字を入力した場合、選択範囲は削除されます。 ・入力の切り替え 入力の切り替えはTabキーを押して下さい。キーを押した場合、キャレットが左側にあ る時には押したキーを数字とみなします。キャレットが中央にある時には押したキー対 応する文字コード(シフトJIS)を入力したことになります。キャレットが右側にある 時には文字コード(UNICODE)を入力したことになります。またIMEから全角文 字を入力することもできます。Shift+Tabで反対方向に切り替えます。 ・挿入/上書きの切り替え 挿入/上書きの切り替えはInsキーを押して下さい。文字を入力した場合、挿入モー ドの時には現在のキャレット位置よりも右にある文字は右に移動し、入力した文字はキ ャレット位置に挿入されます。上書きモードの時にはキャレット位置の文字は削除され ます。文字が選択されている時に文字を入力した場合、モードに関係なく選択範囲を削 除します。選択範囲以外の文字は削除されません。 キャレットはモードにより下記の形になります。 挿入モード 細長い棒状 上書きモード 半角1文字と同じ大きさ ・削除 下記のキー操作で文字の削除が行えます。 BackSpace キャレット位置の前の文字を1文字削除します。 Del キャレット位置の文字を1文字削除します。 Ctrl+Y キャレット位置の行の文字をすべて削除します。 文字が選択されている時に上記のキーを押した場合、選択範囲を削除します。選択範 囲以外の文字は削除されません。 ・ショートカットキー メニュー項目に表示されるショートカットキーに加えて、下記のショートカットキー が使えます。括弧内は同じ動作をするショートカットキーです。 Alt+BackSpace 元に戻す(Ctrl+Z) Shift+Del 切り取り(Ctrl+X) Ctrl+Ins コピー(Ctrl+C) Shift+Ins 貼り付け(Ctrl+V) Ctrl+Shift+Ins 上書き貼り付け Ctrl+Shift+V 上書き貼り付け Ctrl+1 基数の変更 Ctrl+2 アドレス表記の変更 Ctrl+3 マルチバイト格納形式の変更 o基数指定入力 基数(16進数、8進数、2進数、符号なし10進数、符号付き10進数)と文字数 (BYTE、WORD、DWORD)、マルチバイト格納形式(インテル、モトロー ラー)を指定して入力できます。BYTEは1文字分、WORDは2文字分、DWOR Dは4文字分のデータです。 基数、マルチバイト格納形式は「プロパティ」を参照して下さい。 o編集 編集にはクリップボードが利用されます。 編集(切り取り、コピー、貼り付け、削除、文字入力、置換)は編集履歴として保存 され、「元に戻す」や「やり直し」で操作できます。ファイルを保存した時やプロパテ ィを変更した場合、編集履歴は削除されます。キャレットの移動やウインドウのサイズ 変更などは編集履歴に含まれません。 *ファイル o新規作成/開く ・新規作成 新しいファイルを作ります。新規作成されたファイルのプロパティは一番先頭に登録 されているファイルタイプになります。プロパティの初期値を変更したい場合は「オプ ション」の「ファイルタイプ」を参照して下さい。 ・開く すでに存在するファイルを開きます。ファイルが存在しない場合、空のファイルが作 成されます。 開かれたファイルのプロパティはファイルタイプで登録されている拡張子と一致する プロパティになります。拡張子は上から順に検索され、一致する拡張子がない場合、拡 張子が「*.*」となっているファイルタイプが選択されます。 ファイルはドラック&ドロップやコマンドラインからの指定でも開けます。 エクスプローラのメニュー項目の「表示」の「オプション」でファイルを開くときに 起動するプログラムに設定した場合、ファイルを開く時にプログラムが起動し、ファイ ルを開くことができます。 oファイルの履歴 メニューのファイル項目に表示されるファイルの履歴の数を設定できます。現在の履 歴数が指定された履歴数よりも多い場合、古いファイルの履歴は削除されます。 *表示や保存の設定 oプロパティ ファイルを開いた時のプロパティの初期値は「オプション」の「ファイルタイプ」で 決まります。プロパティは作業中のファイルに固有です。ファイルを閉じるとプロパテ ィは削除されます。 プロパティを変更した場合、編集履歴は削除されます。 ・基数 基数を(16進数、8進数、2進数、符号なし10進数、符号付き10進数)の中か ら指定します。 16進数 8進数 2進数 符号なし10進数 符号付き10進数 数字 0123456789ABCDEF 01234567 01 0123456789 -0123456789 桁数 2 1~3 8 1~3 1~4 最小 00 0 00000000 0 -128 最大 FF 377 11111111 255 127 ・アドレス アドレスの表示方法を選択します。 ・マルチバイト格納形式 インテルではWORD(2文字分)やDWORD(4文字分)の数値は下位から順に 格納されます。モトローラーでは上位から順に格納されます。 1234h 12345678h インテル 34 12 78 56 34 12 モトローラー 12 34 12 34 56 78 ・ごみ箱を利用する 同じ名前のファイルがある場合、すでにあるファイルをごみ箱に移します。ごみ箱の 設定によってはファイルは直ちに削除されます。 ・上書き保存を確認する 上書き保存をする場合、メッセージを表示して上書きを行うか確認します。 ・色 表示色を設定します。リストボックスの複数の項目を同時に選択して一括して変更で きます。 「システム色を使う」をチェックした場合、設定した色は使われず、Windows のシステム色が使われます。 ・フォント 表示および印刷に使用するフォントを指定します。フォントは固定幅に限ります。ま た印刷する時のフォントサイズにはこの値は使われず、「紙の大きさ÷右マージン」に なります。 ・ファイルタイプ ファイルタイプを選択してプロパティのすべての値を変更します。 oファイルタイプ ファイルタイプはファイルを開いた時のプロパティの初期値になります。 ファイルを開いた時のプロパティはファイルタイプで登録されている拡張子と一致す るプロパティになります。一致する拡張子がない場合、拡張子が「*.*」となっている ファイルタイプが選択されます。 ・登録されているファイルタイプ 登録されているファイルタイプを表示するドラッグリストです。項目をドラック&ド ロップで移動することができます。 ・新規作成 新しくファイルタイプを登録します。新しい項目の初期値は現在選択されているファ イルタイプの値になります。 ・削除 現在選択されているファイルタイプを削除します。 ・移動 現在選択されているファイルタイプをリストボックスの最後尾に移動させます。 ・編集 現在選択されているファイルタイプを編集します。変更した内容を登録する場合には 「OK」を押して下さい。ファイルタイプの詳細のダイアログボックスの各項目につい ては「プロパティ」を参照して下さい。 また下記の項目はプロパティには存在しません。 ・説明文 ファイルタイプを説明する文です。このダイアログボックスの登録されているファイ ルタイプの項目や、ファイルを開く時や保存する時のダイアログボックスのファイルの 種類の説明文になります。 ・拡張子 ファイルタイプの拡張子を指定します。「;」で区切ることで複数の拡張子を指定で きます。例:「*.c;*.cpp;*.h;*.hpp;*.rc;*.rh」 *構造体による編集 o情報 登録された構造体に基づいてファイルを編集します。下記のキーが利用できます。 ← 左にスクロールします。 → 右にスクロールします。 ↑ 1項目上に移動します。 ↓ 1項目下に移動します。 Ctrl+↑ 1項目上にスクロールします。 Ctrl+↓ 1項目下にスクロールします。 PageUp 1ページ下に移動します。 pageDown 1ページ上に移動します。 Ctrl+PageUp ページの下に移動します。 Ctrl+PageDown ページの上に移動します。 Home 左端にスクロールします。 End 右端にスクロールします。 Ctrl+Home 先頭に移動します。 Ctrl+End 末尾に移動します。 Shift+← 1バイト前に移動します。 Shift+→ 1バイト次に移動します。 Shift+↑ 前のレコードに移動します。 Shift+↓ 次のレコードに移動します。 Shift+PageUp 前の構造体で編集します。 Shift+PageDown 次の構造体で編集します。 Ctrl+Shift+PageUp 前の構造体で編集します。 Ctrl+Shift+PageDown 次の構造体で編集します。 Space 編集 Enter 編集 P 印刷 Esc 終了 o構造体 構造体を登録します。リストボックスにはファイルの先頭からの各項目の名称が表示 されます。ダイアログボックスの各項目には現在選択されている項目の内容が表示され ます。 ・属性 項目の属性を指定します。BYTE、WORD、DWORDは単独の数値で、その長 さは1、2、4バイトで固定です。文字列は1バイト以上の文字列です。数列は1バイ トの数値の数列です。未使用の場合、編集の時にはこの項目の値は表示されません。 編集不可の項目をチェックすると編集時に項目は灰色表示され編集できません。 ・基数 属性がBYTE、WORD、DWORD、数列の時に数値の基数を選択します。 ・マルチバイト格納形式 WORD、DWORDの時に数値の格納形式を指定します。 ・文字コード 文字列の文字コードを選択します。 *イメージビュー 1文字を1ピクセルで表示します。横幅は128ピクセルです。右クリックでそのピ クセルに対応する位置にキャレットを移動させることができます。下記のキーが利用で きます。 ↑ 16ピクセル上に移動します。 ↓ 16ピクセル下に移動します。 PageUp 1ページ下に移動します。 pageDown 1ページ上に移動します。 Home ファイルの先頭に移動します。 End ファイルの末尾に移動します。 *印刷 ファイルを印刷します。選択範囲がある場合、選択範囲だけを印刷することもできま す。印刷時のフォントは表示フォントと同じフォントを使いますが、大きさは「紙の大 きさ÷右マージン」で決まります。 *検索 キャレット位置から数列を検索します。過去に入力した数列は記憶されます。数列は 数値の間を空白またはカンマ、ピリオドで区切って下さい。 選択範囲がある場合、その範囲だけを検索します。 ・大/小文字を区別する アルファベットの大文字と小文字を区別します。 チェックあり チェックなし 「abc」と「abc」 一致 一致 「abc」と「ABC」 不一致 一致 「abc」と「abc」 一致 一致 「abc」と「ABC」 不一致 一致 ・全/半角を区別する 全角(2バイト文字)と半角(1バイト文字)を区別します。 チェックあり チェックなし 「abc」と「abc」 不一致 一致 ・検索方向 検索する方向を選択します。選択範囲がある場合、その範囲の先頭または最後から指 定した方向に向かって検索します。次に検索を行うときShift+F3で逆方向に検索するこ とができます。 *置換 キャレット位置から数列を置換します。過去に入力した数列は記憶されます。数列は 数値の間を空白またはカンマ、ピリオドで区切って下さい。 選択範囲がある場合、その範囲だけで置換します。 ・大/小文字を区別する アルファベットの大文字と小文字を区別します。 チェックあり チェックなし 「abc」と「abc」 一致 一致 「abc」と「ABC」 不一致 一致 「abc」と「abc」 一致 一致 「abc」と「ABC」 不一致 一致 ・全/半角を区別する 全角(2バイト文字)と半角(1バイト文字)を区別します。 チェックあり チェックなし 「abc」と「abc」 不一致 一致 ・置換方向 置換する方向を選択します。選択範囲がある場合、その範囲の先頭または最後から指 定した方向に向かって置換します。 ・置換 置換を開始します。検索数列と一致する数列を見つけた場合、置換を問い合わせるダ イアログボックスが開きます。 ・すべて置換 置換を開始します。検索数列と一致する数列を見つけた場合、直ちに置換し、すべて の置換が終わった時に置換した数列の数を表示します。 *コマンドライン 起動時には下記のオプションが利用できます。オプションは「-」または「/」で文字 列を始めます。スペースを含む場合は「"」で囲んで下さい。「,」の代わりに「.」を 使うことができます。 ・文字コード入力の初期値 書式:-Cn 文字コード入力の初期値を指定します。nのビットの意味は下記の通りです。 0~2 基数(0:16進数、1:8進数、2:2進数、 3:符号なし10進数、4:符号付き10進数) 3~4 文字数(0:BYTE、1:WORD、2:DOWRD) 5 マルチバイト格納形式(0:インテル、1:モトローラー) ・開く/保存のダイアログボックスのファイルの種類を指定する。 書式:-Fn nは16ビットです。下位8ビットは「開く」、上位8ビットは「保存」のダイアロ グボックスのファイルの種類を指定します。 ・ファイルの履歴 書式:-Hn ファイルの履歴数を指定します。 ・初期化ファイルの指定 書式:-I[file][,n] 初期化ファイルを指定します。デフォルトでは「BMAID.EXE」と同じフォルダに「BMA ID.INI」というファイル名の初期化ファイルを作ります。パス名だけを指定した場合は ファイル名はデフォルトの名前になります。拡張子を省略した場合は「.INI」になりま す。 「,n」で1桁の数値を指定します。デフォルトは3です。数値の意味は下記の通りで す。 初期化ファイルの読み込み 初期化ファイルの書き込み 新規作成の確認 0 不可 不可 あり 1 可 不可 あり 2 不可 可 あり 3 可 可 あり 4 不可 不可 なし 5 可 不可 なし 6 不可 可 なし 7 可 可 なし ・新規ファイルを開く 書式:-Nn nが0のときには新規にファイルを作りません。1のときには起動時に開くファイルが ないときには新規にファイルをつくります。デフォルトは0です。 ・レジストリの指定 書式:-Qn nで1桁の数値を指定します。デフォルトは3です。数値の意味は下記の通りです。 レジストリの読み込み レジストリの書き込み 新規作成の確認 0 不可 不可 あり 1 可 不可 あり 2 不可 可 あり 3 可 可 あり 4 不可 不可 なし 5 可 不可 なし 6 不可 可 なし 7 可 可 なし ・検索/置換の初期値 書式:-Sn nのビットの意味は下記の通りです 0 検索時の大文字小文字の区別(0:区別しない、1:区別する) 1 検索時の全角半角の区別(0:区別しない、1:区別する) 2 検索時の検索方向(0:下、1:上) 3 置換時の大文字小文字の区別(0:区別しない、1:区別する) 4 置換時の全角半角の区別(0:区別しない、1:区別する) 5 置換時の検索方向(0:下、1:上) ・ウインドウの座標の指定 書式:-Wn,n,n,n 左から順に下記の通りに指定します。 ウインドウの左上のX座標 ウインドウの左上のY座標 ウインドウの幅 ウインドウの高さ ・プログラムを複数起動する 書式:-Xn 通常、プログラムは同時に起動しない仕組みになっています。nが0ならば2つめの 以降のプログラムを起動した場合、最初に起動されているプログラムがアクティブにな ります。nが1ならばプログラムは複数起動します。 ・子ウインドウの表示状態 書式:-Zn 子ウインドウが開いた時の表示状態を指定します。nが0ならば子ウインドウは通常 の大きさです。nが1ならば子ウインドウは最大化されます。
改造版追加ヘルプ(機能・操作関連箇所をそのまま転載)
○ 1.8B, 1.8C での修正を取り込んだもの ・fnsplitwのファイル名に拡張子がなくフォルダ名に拡張子がある時のバグを修正。 ・検索/置換でUNICODEを入力した時にバッファが足りないバグを修正。 ・大きなサイズのファイルを貼り付けたときにputbufferでデータが損失するバグを 修正。 ・Shiftを押しながらマウスをクリックしたときに範囲選択ができるように WM_LBUTTONDOWNを修正。 ○ 独自修正・変更 ・Vista で構造体名が異常に小さい字で表示されるのを修正。 ・選択範囲のバイト数をステータスバーに表示するように改良。 ・誤字の修正。(DWARD→DWORD、ヘッタ→ヘッダ) ・',' と ';' がファイル名に使える文字として認識されないのを修正。 ・構造体編集画面で、マウスで構造体名を選択すると、それ以降キーボードが効かなく なるのを修正。 ・構造体編集画面で、Space または Enter でメンバの編集ができなかったのを修正。 ・WinNT 系では、メイン画面の Unicode 編集部で、IME から Unicode 固有文字を 直接入力できるように変更。 ・メイン画面の Unicode 編集部でコピー&ペーストすると、Unicode で コピー&ペーストするように変更。 ・メイン画面の Unicode 編集部でサロゲートペアを表示できるように変更。 (印刷は未対応) ・構造体編集画面で Unicode 文字列のメンバはUnicode 固有文字を扱えるように変更。 (WinNT 系では表示・編集が可能。Win9x 系は表示のみの対応。) ・検索で、大/小文字を区別せず、全/半角を区別する設定の時、全角アルファベット の大/小文字は区別するように仕様を変更。(この設定の時に、例えば FF FF の 2バイトを検索すると、FF B0 にもマッチするなど奇妙な動作があったため。) ・構造体編集画面で Ctrl+↓ で下にスクロールできなかったバグを修正。 ・構造体編集画面で Alt+↓ でコンボボックスがドロップダウンするように変更。 ・構造体編集画面で DWORD のモトローラー形式のバイト順が間違っていたのを修正。 ・構造体編集画面でバイト数に合わせて入力文字数を制限するように変更。 ・構造体の詳細ダイアログでアクセスキーを一部変更。 ・オプションメニューから、基数、アドレス形式、バイトオーダーを変更できるように 変更。 ・Ctrl+Shift+Z を「やり直し」に割り当てた。 ・「指定アドレスへ移動」ダイアログで、相対アドレスによる指定をできるように 変更。(アドレスの先頭に + または - を付けると相対アドレス指定。) ・Ctrl+R を「置換」に割り当てた。 ・検索・置換の方向を簡素化した。 - 検索・置換ダイアログボックスに出る検索・置換の方向は、常に前回それぞれの ダイアログボックスで指定した方向と同じ。 - F3 による検索は常に下方向。Shift+F3 による検索は常に上方向。 ・検索・置換で Unicode 固有文字を扱えるように変更。(WinNT 系のみ) ・置換情報ダイアログで、& を含む文字列が正しく表示されないのを修正。 ・置換情報ダイアログで、置換対象のバイト数を表示するように変更。 ・ツールバーをフラットタイプに変更。 ・メニューのアイコンの見栄えを改善。
「うさみみハリケーン」同梱版追加ヘルプ
オリジナルおよび改造版の完成度は高いが、新しいWindowsを実行環境とするために若干の変更を行った。「うさみみハリケーン」同梱にあたっての、オリジナルおよび改造版からの主要な変更点は下記。以下の解説にある「キャレット」は、現在の操作対象オフセットを指す、点滅する印を意味する。
ユーザーインターフェースを新しいWindows用に改造し、さらに高DPI環境に対応することで、視認性や操作性を高めた。なお、動的なDPI変更への対応には、Windowsの再起動が必要となることがある。
メインウィンドウでの表示用フォントに、視認性が高い等幅フォント「BIZ UDゴシック」を適用するようにした。このフォントは、実行環境がWindows 10 build 17763(Windows 10 October 2018 Update)以降で初期設定として適用、それ以前のWindowsならば「MS ゴシック」を適用する。ちなみに、他のWindows付属の等幅フォントには、「UD デジタル 教科書体 N-R」があり、「へきさにゃん」のメニュー「オプション」→「表示関連プロパティ」画面からフォント設定で指定・適用が可能。なお、フォントの指定時は、上記3つの等幅フォントのいずれかで、かつ、フォントサイズは既定のサイズが選択されることを想定しており、それ以外のフォントやフォントサイズの指定は動作不具合を招く可能性がある。
オリジナルのレジストリへの書き込み処理を回避し、各種設定はインストールフォルダ内のINIファイルに保存する、ポータブルアプリケーション化を行った。ただし、すべての設定項目を保存しているわけではなく、ウィンドウのサイズと位置、使用フォントとフォントサイズ、標準の色設定、開いたファイルの履歴など、利便性の面で重要な項目のみ保存している。新規に作成した構造体やファイルタイプの設定は保存されない。ちなみに、ファイルタイプに応じて設定を切り替えたいならば、コマンドラインオプション「-Iファイルパス」で特定ファイルタイプ用のINIファイルを指定した、特定ファイルタイプ用の「へきさにゃん」を、それぞれ「NekoLaunch」などのランチャーに登録することで切り替え可能。
UTF-16文字列表示箇所をUTF-8文字列表示に切り替え可能にした(メニュー「オプション」→「UTF-16をUTF-8の表示に切り替え」)。これにより、オリジナルが対応していない、文字コードUTF-8での表示、キーボードからの入力、コピーおよび貼り付けに対応した。同様に、ASCII文字列での表示にも対応している(メニュー「オプション」→「Windows ANSIをASCIIの表示に切り替え」)。なお、1バイト文字のみ表示ならば、メニュー「オプション」→「表示関連プロパティ」の画面でコードページを「SHIFTJIS」から「ANSI」に変更するアプローチもある。併せて、UTF-16表示時に、標準的な偶数オフセットではなく、奇数オフセットから文字列が始まるケースに対処可能にした(メニュー「オプション」→「UTF-16を奇数オフセットから読み込む」)。
数値入力による範囲選択を行い、併せて、同選択範囲への各種演算実行や、同選択範囲内バイナリデータを各種形式で文字列としてコピーする機能を実装した(メニュー「編集」→「数値入力で選択範囲を指定+演算+特殊コピー」)。この、各種演算機能では、加算などの算術演算、排他的論理和などの論理演算、ビット反転、ビットシフトやローテート、エンディアン変換、バイト順逆転、シフト数を指定可能なROT13とROT47に対応している。また、各種形式でのコピーでは、区切りや改行単位を選択可能なBYTE/WORD/DWORD/QWORDの配列形式に加え、改造コード形式、Base64、さらに、対象バイナリデータに対するMD5/SHA-1/SHA256、エントロピーなどの形式でもコピー可能。この、各種演算機能および特殊コピー機能は、ダンプ画面でのリトルエンディアン・ビッグエンディアン設定に対応している。
「基数指定入力」(メニュー「編集」下)機能で、オリジナルのBYTE/WORD/DWORDでの入力に加えて、QWORD/float/doubleでの入力に対応した。QWORDは16進数か10進数(符号なし・符号付き両方可)で数値指定、floatとdoubleは符号付き10進数で数値指定を行う。また、利便性を考慮し、QWORD/float/doubleでの数値未入力あるいは数値へ変換できない文字列の入力は、数値0の入力として処理する。
利便性を向上させるために以下の機能を実装した。
・検索条件入力を簡易化する10進数値等のバイト列変換機能
・キャレット位置オフセットの数値をウィンドウ右側に各種形式で表示機能(背景の反転色で表示)
・クリップボード内の16進文字列をバイナリデータ化して貼り付け機能
・指定したファイルのバイナリデータを貼り付け機能
・256箇所までの栞(しおり:ブックマーク)設定機能
・編集中のファイルを登録したソフトウェアで開く機能
・「うさみみハリケーン」同梱ソフトウェア群との連携機能
・連番あるいは時系列のバックアップ作成機能
・メインウィンドウの最前面表示機能や透明化表示機能
オリジナルでの左ドラッグによる範囲選択では、選択開始時あるいは終了時のキャレットのオフセットは選択範囲に含めない仕様となっている。そのため、一部のプログラム解析ツールと操作の互換性を持たせる目的で、範囲選択開始時あるいは終了時のキャレット位置を選択範囲に含めるオプションを追加した(メニュー「編集」→「選択範囲に選択開始/終了オフセットを含める」)。また、このオプションが無効の場合でも、Ctrlキーを押しながら左ドラッグで範囲選択をすれば、範囲選択開始時あるいは終了時のキャレット位置を選択範囲に含めるようにした。なお、このオプションは、キャレット位置と左クリック位置の2つのオフセット間を選択範囲にする、Shiftキー+左クリック操作にも適用される。このオプションが有効ならば選択範囲が自動拡張され、左ドラッグによる1バイトだけの範囲選択ができなくなるため、左ダブルクリックでキャレットのオフセットを1バイト範囲選択するようにした。ちなみに、選択範囲の指定は、Shiftキー+矢印キーや、メニュー「編集」→「数値入力で選択範囲を指定+演算+特殊コピー」でも可能。
選択範囲を値0x00、値0xFFあるいは、ランダムな値で上書きする機能を実装した(メニュー「編集」以下)。これにより、ファイル全体を選択後に0x00あるいは0xFFで上書き保存し、さらにランダムな値で上書き保存をすれば、ファイルの内容を復元するのは極めて困難となる。このランダムな値の生成には、CNG(次世代Cryptography API)を使用している。ちなみに、このような復元を回避するデータ消去方法には、米国国家安全保障局(NSA)方式のランダムで2回ゼロで1回の上書き保存、米国国防総省準拠方式の0xFF(固定値)で1回ゼロで1回ランダムで1回の上書き保存といった色々な方法がある。また、このような消去方法を用いるファイル削除専用ソフトウェアも複数公開されている。
ステータスバー右側に、ダンプ表示で使用している基数やオフセットの進数と、エンディアン指定状況および、上書きと挿入の指定状況を表示するようにした。
上記UIPIによる制約に対処し、管理者権限で起動した当ソフトウェアに、ユーザー権限のエクスプローラー等からファイルのドラッグ・アンド・ドロップが可能になった。
当ソフトウェアを管理者権限で起動すれば、ユーザー権限はもちろん本来の管理者権限でも読み書きアクセスができない、一部のファイルを読み書きできるようにした。
メニュー項目「ファイル終端へ移動」といった、オフセット移動時のダンプ表示を高速化するために、横スクロール位置の復元処理をスキップさせている。これは一般的に、ヘキサエディタはダンプ表示の全体が表示される状況で使用されることによる。
互換性維持のために残されており、すでに使用が非推奨となったAPI関数の使用箇所は、適切な新しい代替API関数がある場合に限り、その代替API関数を使用するようにした。
ダンプウィンドウで表示するカーソルは、基本設定ではWindowsのテキスト選択用「IBeam」を使用する。しかし、カーソルの視認性を高めたい方に対応するため、インストールフォルダにカーソルファイル「HekisaNyan.cur」があれば、「へきさにゃん」の起動時にそのカーソルを読み込んで使用するようにした。
「うさみみハリケーン」と同様にF9キーで緊急回避、すなわち全ウィンドウの最小化を行うようにした(Win+Dキーで復旧)。
設定ファイル「HekisaNyan.ini」内のセクション[HekisaNyan]に設定項目「WinTitle=」追加で、メインウィンドウのウィンドウタイトルを設定可能にした。
一部の処理でスタック初期化処理を追加して不具合発生を回避させた。
一部の処理に構造化例外ハンドラを設定して不測の強制終了を回避させた。
現在では需要が少ない印刷機能を、画面コピーあるいは画面のBMPファイル出力機能に変更した。BMPファイル出力時は編集中ファイルと同じフォルダに連番で自動出力する。
複数のファイルを開いた場合は、以下のMDI用ショートカットキーが使用可能になる。
Ctrl + F6 : 次の子ウィンドウをアクティブにする
Ctrl + Shift + F6 : 前の子ウィンドウをアクティブにする
Ctrl + F4 : アクティブな子ウィンドウを閉じる
開発補記
当初は全く新しい日本語ベースのヘキサエディタを、C++あるいはC#(WPF)で開発する予定でした。しかし、その開発は、次の時代を担う日本の方々が行えば、より素晴らしいものが出来上がるだろうという結論に至りました。次の時代の定番となるであろう、新しい日本語ベースのヘキサエディタの開発において、「へきさにゃん」が少しでも参考になれば幸いです。