2016-12-01 139 views
0

我想更改ELF文件中的全局結構。 我首先想知道一個全局變量是否是一個結構? 但我看到的唯一信息是變量的名稱和大小。如何在ELF文件中查找變量類型?

+2

該類型的細節只會存儲在調試信息中;當程序運行時不需要信息。你所做的事似乎可能被誤導 - 預計會失敗。使用該結構的代碼將與源代碼編譯時使用的結構形狀/大小密切相關。如果你改變了這一點,你的程序就會失靈。 –

+2

ELF文件中沒有「變量」或「類型」。這些是源代碼概念。 ELF文件僅包含指向數據開始的批量數據和符號。如果你喜歡,所有的精靈文件都是'char []'和'void *'。 –

+0

你爲什麼問?你的問題還不清楚(嚴格意義上ELF定義了它的結構),很可能是[XY問題](http://xyproblem.info)。所以你應該編輯你的問題來激勵它,解釋更多。 –

回答

5

你找不到它。 ELF格式的類型信息非常有限(並且不知道某個全局變量是否爲structint;它主要知道該變量爲sizeof)。見elf(5)

但是,如果您編譯程序(及其使用的庫)以用於調試支持(例如使用g++ -Wall -g)。那麼ELF文件包含額外的調試部分,通常使用DWARF格式。這些信息可以使用strip命令從ELF文件中刪除。所以看到strip(1) & readelf(1) & objdump(1)

但是你真的想用source code。所以得到程序的源代碼(因爲Linux主要由free software組成,這通常是可能的),並重新編譯它(當然還有學習程序的源代碼)。也許你想(但這需要數週的工作)來定製你的編譯器(例如編寫你自己的GCC插件,或者使用GCC MELT,或者定製你的Clang編譯器),並使用它來重新編譯代碼(並且專門處理所有全局變量聲明)。

相關問題