2013-03-11 132 views
1

我下載class-dump用於獲取有關的Mach-O文件的信息。創建一個示例應用程序的頭文件類突降
,我認出了該工具創建一個奇怪的CDStructures.h離奇CDStructures.h今天

有很多的struct -objects定義,符合市場預期。但他們中的一些沒有成員,像這樣:

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

但其他struct -objects使用這些空物體是這樣的:

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

是嗎?還是錯過了什麼?我覺得很奇怪,他們是那麼多沒有成員的對象。
另一件事是,這namespace或任何sp沒有宣佈任何地方。

但我見過的最奇怪的是,尖括號內的元素,一方面類型(sp::GuiControl*)和另一方面值(64true)。

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

也許,你已經看到了這樣的事情,可以幫助我。我不知道我應該從哪裏開始。
這只是我的錯,還是在Mach-O文件中缺少信息?

+3

那些可能是前向聲明。結構的字段可能在另一個文件中。 – 2013-03-11 17:52:03

+0

我搜索了他們,但沒有任何這些結構的聲明。 – 2013-03-11 17:53:20

+0

你檢查過所有的文件,而不只是頭文件嗎? – 2013-03-11 18:09:38

回答

1

class-dump只能告訴你爲其信息是存在於由編譯器生成的可執行文件的Objective-C的元數據結構。這通常包括任何Objective-C類以及它們作爲成員包含的任何結構(Objective-C運行時需要知道其反射/動態訪問工作的佈局)。在struct AlbumInfostruct GuiControl的情況下,只有指針他們都存在,並且指針的大小始終是無論它指向相同的,所以沒有必要列入指向的結構佈局。

class-dump包括前聲明,使代碼在語法上是正確的,但它並沒有產生實際的結構佈局,因爲它是不存在的二進制文件。

至於尖括號的語法,它只是C++模板實例。同樣,模板聲明並不存儲在二進制文件中,而只存儲在指定了所有參數的模板的具體實例中。

+0

因此沒有機會獲得'struct AlbumInfo'或'struct GuiControl'的成員列表? – 2013-03-12 12:57:08

+0

那麼,*有*信息存在的可能性,但由於某種原因,類轉儲無法找到或解釋它,但我真的懷疑它。如果這些結構的佈局未在Objective-C類中使用,那麼很可能編譯器尚未生成必要的信息。您需要調查使用這些結構的方法來發現它們的佈局。 – 2013-03-12 14:16:12