1

今日、Mach-O ファイルに関する情報を取得するために、class-dumpをダウンロードしました。class-dump
がサンプル アプリケーションのヘッダー ファイルを作成した 後、ツールによって作成された奇妙なファイルに 気付きました。CDStructures.h

予想通り、オブジェクトの定義はたくさんありますstruct。ただし、次のようにメンバーを持たないものもあります。

struct AlbumInfo;
....
struct ArtistInfo;
....

しかし、他のstructオブジェクトは、これらの空のオブジェクトを次のように使用します。

struct RefPtr<sp::AlbumInfo> {
    struct AlbumInfo *_p;
};

そうですか?それとも何か足りないものがありますか?メンバーを持たないオブジェクトが非常に多いのは奇妙だと思います。
もう1つのことは、これnamespaceまたは何かspがどこにも宣言されていないことです。

しかし、私が見た中で最も奇妙なことは、山括弧内の要素が一方で型 ( sp::GuiControl*) であり、他方で値 ( 64, true) であることです。

struct Array<sp::GuiControl*, sp::GuiControl* const&, 64, true> {
    struct GuiControl **_field1;
    unsigned int _field2;
    unsigned int _field3;
};

おそらく、あなたはすでにこのようなものを見たことがあり、私を助けることができます. どこから始めればいいのかわからない。
これは私のせいですか、それとも Mach-O ファイルに情報が不足していますか?

4

1 に答える 1

1

class-dumpコンパイラによって生成された実行可能ファイルの Objective-C メタデータに情報が存在する構造のみを表示できます。これには通常、Objective-C クラスと、メンバーとして含まれる構造体が含まれます (Objective-C ランタイムは、リフレクション/動的アクセスが機能するためにレイアウトを認識する必要があります)。struct AlbumInfoまたはの場合、それらへのポインターstruct GuiControlのみが存在し、ポインターのサイズはそれが指すものに関係なく常に同じであるため、ポインター先の構造体のレイアウトを含める必要はありませんでした。

class-dumpコードが構文的に正しいように前方宣言が含まれていましたが、バイナリに存在しなかったため、実際の構造体レイアウトは生成されませんでした。

山かっこの構文に関しては、それは単なる C++ テンプレートのインスタンス化です。繰り返しますが、テンプレート宣言はバイナリには保存されませんが、すべてのパラメーターが指定されたテンプレートの具体的なインスタンスのみが保存されます。

于 2013-03-12T11:58:08.730 に答える