文件偏移列似乎与存档中的目标文件位置相关
您从中获得的文件偏移量objdump
是相对于单个目标文件的开头的。您可以将档案库视为书架,并将输出objdump -h
视为每本书中的索引。您不会期望索引会根据书架上的其他书籍或您从书架上取书的时间而改变。同样,目标文件本身(以及 的输出objdump -h
)在您放入库时不会改变,或者再次将其提取出来(您会得到位相同的副本)。
我希望我可以使用 dd 从存档文件中提取二进制信息
您可以使用dd
,但您必须首先找到存档中每个单独对象文件的位置。这并不太难:UNIX 归档文件的格式已记录在案。但是格式可能会根据您使用的 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.$$