2016-02-16 58 views
0

我必須創建一個C++程序來查找* .so(共享對象)文件是32位還是64位(例如,libjvm.so)。我對Windows中的dll文件也做了同樣的事情,但是卡住了非Windows共享對象文件。如何使用gnu C++程序獲取共享對象文件(.so文件)的體系結構?

Linux中有許多命令可以找到。但我沒有看到一個簡單的編程方式來獲得這個。命令objdump源代碼有這麼多的東西,不知道我可以複製它在我的代碼。

我不想在代碼中使用系統(「」)函數調用命令來獲取體系結構的詳細信息。

任何想法如何使用gnu C++程序獲取.so文件的體系結構。

我正在使用Linux RHEl 6.2和編譯器GNU gcc 4.8.3。

感謝

回答

1

閱讀ELF格式和elf(5)。然後,只需讀取ELF標題並處理它。

也許使用libelf(甚至libbfd,這是矯枉過正,你的情況),但你可能甚至不需要它,你可以在一些ElfN_Ehdr使用fread和使用e_machinee_type從ELF頭。

當然,您可能會加載共享對象dlopen(3),但它確實會從加載的插件運行一些(構造函數,它可能是function attribute)代碼。然後使用dlsym(3),但要小心name mangling

相關問題