令和の時代におすすめするのもの憚られる、リリースから20年以上経った今も現役なバイナリエディタStirlingとその使い方についてのメモ。
バイナリエディタStirling
先輩エンジニアに「バイナリデータいじるとき何使ってます?」と聞くと、大抵Stirling使ってる気がします。
諸先輩方がおすすめするだけあり、バイナリファイルの閲覧はもちろん編集もできますし、独自に構造体を定義して効率よくバイト配列の中身をいじくりまわせます。
Stirlingの入手
懐かしのVectorからダウンロードしましょう。ここからどうぞ。
ダウンロードページへいき、、、
今すぐダウンロードです!!
あとは好きなところに解凍してあげてください。
Stirlingの基本
ファイルを閲覧・編集したいときは、Stirling.exeを起動して[ファイル]->[開く]からバイナリデータを閲覧したいファイルを選択するも良し。ドラッグ&ドロップで開くも良しです。
何かしらのファイルをStirlingで開くと、画面左側に16進数表記(赤枠部)が表示され、右側にアスキーコード表記(青枠部)が並列して表示されます。
どちらを編集してもいいです、場合に応じて使いわけましょう。
構造体編集機能
Stirlingには構造体編集という機能があります。バイナリとして特定のファイルフォーマットをもつファイルを閲覧編集するときに重宝します。
構造体編集する際は[設定]->[構造体編集]をチェックしましょう。
構造体編集時は上図のような専用画面が立ち上がります。赤枠の部分から定義済みの構造体を選択し「再読込」して適応しましょう。
なお初期ダウンロードの時点でBMP画像ファイルフォーマット用の構造体が定義されているようですので、「BITMAP256_SAMPLE」を使ってみたところ以下のようにちゃんとサイズが出ています。
このように構造体編集機能では、参照中のバイナリファイルの中身を定義済み構造体に当てはめて表示できます。
構造体の定義
exeファイルと同じ階層にあるstruct.defファイルに構造体が定義されています。
このファイルを加筆修正することで、自由に構造体編集機能で使える型を増やすことが可能です。
Stirlingの構造体の書き方
元からサンプルとして存在しているBITMAP256_SAMPLEが以下です。
struct BITMAP256_SAMPLE
{
BITMAPFILEHEADER FileHeader ;
BITMAPINFOHEADER bmiHeader ;
RGBQUAD bmiColors[256] ;
} ;
上記を例に読み替えると、以下のような表記で構造体を定義できるようです。
struct 構造体名
{
型名 変数名;
型名 変数名;
型名 変数名[配列数]; ※配列の時
}
Stirling構造体に使える型
基本の型として以下を利用できるみたいです。
型名 | サイズ | Stirling構造体編集時の値 |
BYTE | 1バイト | 16進表記 |
byte | 1バイト | 符号なし10進表記 |
CHAR | 1バイト | 符号付き10進表記 |
WORD | 2バイト | 16進表記 |
word | 2バイト | 符号なし10進表記 |
SHORT | 2バイト | 符号付き10進表記 |
DWORD | 4バイト | 16進表記 |
dword | 4バイト | 符号なし10進表記 |
LONG | 4バイト | 符号付き10進表記 |
float | 4バイト | 単精度浮動小数点数 |
double | 8バイト | 倍精度浮動小数点 |
また、上記に加えて自分で定義したstructを型として再利用できます。
構造値定義の例
例えば、縦横サイズをそれぞれ2バイト整数として格納したバイナリに対応したいのなら、以下のようになります。新しい構造体の名前はMY_STRUCT_SIZEとしておきます。
struct MY_STRUCT_SIZE
{
SHORT width;
SHORT height;
};
さらに、自分で定義した構造体を以下のように再利用することも可能です。
struct MY_STRUCT_HEADER
{
MY_STRUCT_SIZE size;
BYTE data[32];
};