2011-01-14 55 views
0

是否有可能確定在庫中的結構(C語言)的元素(名稱&數據類型)?如果是的話,怎麼用C語言來做?如果C語言不支持它,是否有可能通過其他技巧獲取結構元素,或者是否有任何工具可以使用它?尋找在結構中的元素在C語言

回答

3

不,這是不可能的。 C沒有內置的反射式支持。

5

你的意思是找出在編程時,或在運行時動態?

對於前者,當然。只需找到包含的.h文件,您將在其中找到包含所有字段的結構定義。

對於後者,不,這是不可能的。 C編譯結構以便以這種方式加密代碼,以使所有這些信息都丟失。舉例來說,如果你有一個結構{int x, float y, int z},和你有一些代碼,說

a = mystruct.y 
在機器代碼

,一切仍將是像找到指針mystruct,將4它(的大小int),並從那裏讀取4個字節,然後對其執行一些浮點操作。這些結構字段的名稱和類型都不會被訪問,因此,無法在運行時找到它們。

+0

謝謝你的回覆,但是如何在機器代碼中找到指向mystruct的指針? – 2011-01-17 07:43:23

+0

您需要閱讀程序集並理解(完全不同的語言)。但我不認爲這就是你的意思。也許你在我說「找到指向mystruct的指針之類的東西」時會誤解。我的意思是生成的代碼會知道`mystruct`的位置(也許它將地址從棧中取出),然後它將執行必要的算術運算。但是那裏沒有足夠的信息來知道運行時字段的名稱和類型。 – mgiuca 2011-01-17 08:30:11

0

如果「確定結構的元素」你的意思是「得到這個結構的聲明式編程」,那麼我不認爲這是可能的 - 至少不可移植性。與更現代的語言(如C++或Java)相反,C不會將類型信息保存在實際程序可用的表單中。

編輯:

爲了澄清這件事是不可能的「便攜」我的評論:

有很可能是一些編譯器+調試格式的組合,將嵌入在它產生的目標文件的必要信息,雖然我不能說我知道之一。假設你可以打開自己的可執行文件並解析調試信息。但是,這是一個繁瑣的和脆弱的做法,充其量...

爲什麼你需要做這樣的事情?