構造体ビュー

構造体ビューは、.yupat で定義した構造を現在のカーソル位置に適用し、バイナリデータをフィールド単位で確認するための機能です。

補足: .yupat のサンプルファイルは、配布パッケージ内の patterns フォルダに含まれています。

開き方

  1. YuHex で解析したいファイルを開きます。
  2. メニュー(設定 - 解析 - 構造体ビュー)から構造体ビューウィンドウを表示します。
  3. 構造体ビューの 開く... ボタンから .yupat ファイルを選択します。
  4. 16進ダンプ領域 のカーソル位置を基準として、構造体ビューに解析結果が表示されます。

.yupat の書き方

.yupat は、C言語の struct 宣言に、YuHex 用のディレクティブを少し加えた定義ファイルです。

基本ルール

よく使うディレクティブ

ディレクティブ 説明
@entry 型名 構造体ビューの起点になる構造体型を指定します。
@member_align 0 メンバー間の自動パディングを入れません。ファイルフォーマット定義ではよく使います。
@member_align 4, @member_align 8 自然アラインメントに従ってメンバーを配置し、必要ならパディングを入れます。
@pointer_size 4, @pointer_size 8 ポインタ型を何 byte として扱うかを指定します。
@sizeof_short, @sizeof_int, @sizeof_long など C の基本型サイズをファイル単位で上書きします。

すべてのディレクティブ

ディレクティブ 説明
@entry <type-name> 起点となる構造体型名を指定します。構造体定義が複数ある場合は必須です。
@sizeof_short <number> short 系を何 byte として扱うかを指定します。省略時は 2 です。
@sizeof_int <number> int 系を何 byte として扱うかを指定します。省略時は 4 です。
@sizeof_long <number> long 系を何 byte として扱うかを指定します。省略時は 8 です。
@sizeof_long_long <number> long long 系を何 byte として扱うかを指定します。省略時は 8 です。
@sizeof_float <number> float を何 byte として扱うかを指定します。省略時は 4 です。
@sizeof_double <number> double を何 byte として扱うかを指定します。省略時は 8 です。
@pointer_size <number> すべてのポインタ型を何 byte として扱うかを指定します。省略時は 8 です。
@member_align <number> メンバー配置時のアラインメント上限を指定します。省略時は 80 の場合はメンバー間パディングを入れません。

対応している宣言

制限事項

EBNF 風文法

file            = { ws | comment | directive | declaration } ;

directive       = "@entry" ident
                | "@sizeof_short" number
                | "@sizeof_int" number
                | "@sizeof_long" number
                | "@sizeof_long_long" number
                | "@sizeof_float" number
                | "@sizeof_double" number
                | "@pointer_size" number
                | "@member_align" number ;

declaration     = typedef_decl
                | struct_decl
                | forward_decl ;

typedef_decl    = "typedef" type_spec declarator_list ";" ;

struct_decl     = [ "typedef" ] "struct" [ ident ] "{"
                  member_decl* "}" [ ident ] ";" ;

forward_decl    = "typedef" "struct" ident ident ";" ;

member_decl     = type_spec declarator ";" ;

type_spec       = builtin_type
                | ident
                | "struct" ident ;

declarator_list = declarator { "," declarator } ;

declarator      = [ "*" ] ident [ array_suffix ] ;

array_suffix    = "[" number "]"
                | "[" "]" ;

サンプル

@member_align 0
@pointer_size 8
@entry sample_record

typedef unsigned char  BYTE;
typedef unsigned short WORD;
typedef struct nested_header nested_header_t;

struct nested_header {
    WORD flags;
    BYTE reserved[2];
};

typedef struct sample_record {
    WORD            magic;
    BYTE            version;
    BYTE            name_length;
    BYTE            name[8];
    nested_header_t header;
    void*           next;
    char            payload[];
} sample_record;

このサンプルには、typedef、前方宣言、通常メンバー、固定長配列、構造体メンバー、ポインタ、可変長配列が含まれています。

配布パッケージの patterns フォルダには、tftp_rrq.yupatzip_local_file.yupat などのサンプルが含まれています。まずはそれらを編集して使い始めるのがおすすめです。

画面の見方

項目 説明
オフセット 16進ダンプ領域 のカーソル位置を基準にした実ファイル上の位置を表示します。
フィールドの内容を表示します。数値、16進列、ASCII文字列など、表示形式を切り替えられます。
サイズ フィールドのサイズを byte 単位で表示します。可変長配列は 1+ のように表示されます。
フィールド 構造体名、メンバー名、または <padding> を表示します。

表示の特徴

値の表示設定

列の見出し右側にあるボタンから、表示形式を切り替えられます。

設定項目 内容
バイト配列表示 16進列ASCII文字列 を切り替えます。
数値の並び Little EndianBig Endian を切り替えます。
数値の表示 HexDec を切り替えます。

ASCII文字列表示では、次のルールで表示します。

ボタン

ボタン 説明
開く... .yupat 定義ファイルを選択します。
再読込(F5) 現在開いている .yupat 定義ファイルを再読込します。
クリア 現在の構造体定義を外し、構造体ビューを空にします。
情報 定義ファイルの情報ペインを開閉します。

エラー表示

注意事項

README に戻る