偏移柱出現在歸檔中,以相對於目標文件位置的文件
從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.$$
ar p libmylib.a | grep'\ .o $'不會在我的系統(Fedora)上打印任何東西,但是objdump -h libmylib.a | grep -o'[^] * \。o'的作品。 – ACyclic
@NYCBrit應該是'ar t',而不是'ar p'。對於那個很抱歉。 –