是否有可能確定在庫中的結構(C語言)的元素(名稱&數據類型)?如果是的話,怎麼用C語言來做?如果C語言不支持它,是否有可能通過其他技巧獲取結構元素,或者是否有任何工具可以使用它?尋找在結構中的元素在C語言
0
A
回答
3
不,這是不可能的。 C沒有內置的反射式支持。
5
你的意思是找出在編程時,或在運行時動態?
對於前者,當然。只需找到包含的.h文件,您將在其中找到包含所有字段的結構定義。
對於後者,不,這是不可能的。 C編譯結構以便以這種方式加密代碼,以使所有這些信息都丟失。舉例來說,如果你有一個結構{int x, float y, int z}
,和你有一些代碼,說
a = mystruct.y
在機器代碼
,一切仍將是像找到指針mystruct
,將4它(的大小int),並從那裏讀取4個字節,然後對其執行一些浮點操作。這些結構字段的名稱和類型都不會被訪問,因此,無法在運行時找到它們。
0
如果「確定結構的元素」你的意思是「得到這個結構的聲明式編程」,那麼我不認爲這是可能的 - 至少不可移植性。與更現代的語言(如C++或Java)相反,C不會將類型信息保存在實際程序可用的表單中。
編輯:
爲了澄清這件事是不可能的「便攜」我的評論:
有很可能是一些編譯器+調試格式的組合,將嵌入在它產生的目標文件的必要信息,雖然我不能說我知道之一。假設你可以打開自己的可執行文件並解析調試信息。但是,這是一個繁瑣的和脆弱的做法,充其量...
爲什麼你需要做這樣的事情?
相關問題
- 1. C語言結構式
- 2. C語言,文件結構
- 3. 尋找最好的if語句結構
- 4. 在CodeIgniter中實現多語言結構
- 5. C++尋找在數組中發生率最高的元素
- 6. 在C中尋找素數因子
- 7. 我想在c語言中乘以兩種不同的結構
- 8. 在C語言中訂購優勢的結構成員
- 9. C語言:在函數中釋放結構成員的錯誤
- 10. 在C語言中,比較一個結構的兩個成員
- 11. 這個typedef結構在C語言中的含義是什麼?
- 12. 在C#中是否有與PHPs list()類似的語言結構?
- 13. 硒,尋找元素
- 14. 爲尋找元素
- 15. 硒尋找元素
- 16. C#:查找和更改元素在結構
- 17. 序言 - 尋找元素的平均列表中
- 18. 在BST尋找元素總結爲提供的值
- 19. 在sendto()函數中發送一個結構 - C語言
- 20. 尋找Selenium WebDriver的元素
- 21. 結構值不能改變(C語言)
- 22. C語言數據結構可視化
- 23. C語言:結構和數組
- 24. 在C或C++中尋找
- 25. 尋找在Vector多個元素
- 26. 尋找在C#
- 27. 尋找非圖靈完成的語言
- 28. 如何在向量的元素中查找結構數據?
- 29. 在C中聲明結構中的n元素
- 30. 宣言,並在結構在C
謝謝你的回覆,但是如何在機器代碼中找到指向mystruct的指針? – 2011-01-17 07:43:23
您需要閱讀程序集並理解(完全不同的語言)。但我不認爲這就是你的意思。也許你在我說「找到指向mystruct的指針之類的東西」時會誤解。我的意思是生成的代碼會知道`mystruct`的位置(也許它將地址從棧中取出),然後它將執行必要的算術運算。但是那裏沒有足夠的信息來知道運行時字段的名稱和類型。 – mgiuca 2011-01-17 08:30:11