2012-10-04 28 views
1

我想在Linux中提取一個。ELF存檔文件中的二進制部分。如何獲取ELF存檔文件中某個部分的真實位置?

當我在檔案文件上運行objdump -h時,會列出它包含的對象文件以及每個節的節標題。但是,文件偏移列似乎與檔案中的對象文件位置相關,否則它們將會重疊所有部分。

我希望我可以使用dd從檔案文件中提取二進制信息。 (見How do you extract only the contents of an ELF section)。我如何用檔案做到這一點?

我還要提到我提取添加使用此命令的部分:

echo "hi" > commentFile 
objcopy libmylib.a --add-section .mysection=commentFile libmylib.a 

回答

2

偏移柱出現在歸檔中,以相對於目標文件位置的文件

objdump獲得的文件偏移量與單個對象文件的開頭相關。您可以將檔案庫視爲書架,並將objdump -h的輸出視爲每本書中的索引。您不希望索引因書架上的其他書籍或您從書架上拿下書本而改變。同樣,目標文件本身(以及objdump -h的輸出)在放入庫時不會更改,或者再次提取出來(您獲得的是相同的副本)。

我希望我可以用dd從存檔文件

可能使用dd提取二進制信息,但你必須先找到在每個單獨的對象文件的位置存檔。這並不難:UNIX歸檔文件的格式是documented。但是格式可能會根據您使用的UNIX變體而變化,並且對於您想要執行的任務來說並不是必需的。

我該如何對存檔進行此操作?

如果你知道.mysection在所有對象文件相同的內容libmylib.a(如將是你給了objcopy --add-section命令的情況下),然後提取一個對象,從存檔,然後抽取部分:

firstobj=$(ar t libmylib.a | grep '\.o$' | head -1) 
ar x libmylib.a $firstobj 
# use objdump -h and dd to extract section context. 
# or use "readelf -p .mysection $firstobj 
rm -f $firstobj 

如果.mysection的內容可以在不同的目標文件不同,它們解壓到一個臨時目錄:

mkdir tmp.$$ && cd tmp.$$ && ar x ../libmylib.a 
for obj in $(find . -type f); do 
    # extract .mysection from $obj 
done 
cd .. && rm -rf tmp.$$ 
+0

ar p libmylib.a | grep'\ .o $'不會在我的系統(Fedora)上打印任何東西,但是objdump -h libmylib.a | grep -o'[^] * \。o'的作品。 – ACyclic

+0

@NYCBrit應該是'ar t',而不是'ar p'。對於那個很抱歉。 –

相關問題