偏移柱出现在归档中,以相对于目标文件位置的文件
从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'。对于那个很抱歉。 –