오프셋 열이 아카이브에 오브젝트 파일의 위치를 기준으로 표시되는 파일
objdump
에서 가져온 파일 오프셋은 개별 오브젝트 파일의 시작에 상대적입니다. 보관함을 책장으로 생각하고 의 출력을 각 개별 책의 색인으로 생각할 수 있습니다. 선반에있는 다른 서적이나 선반에서 책을 가져갈 때 색인이 변경되는 것을 기대하지 않았습니다. 마찬가지로, 오브젝트 파일 자체 (및 출력은 objdump -h
)는 라이브러리에 넣거나 다시 추출 할 때 변경되지 않습니다 (비트 동일 복사를 얻음).
은 내가 보관 파일
당신 수 사용 dd
에서 바이너리 정보를 추출하는 DD를 사용할 수있는 예상하지만, 먼저 각 개별 오브젝트 파일의 위치를 찾아야 할 것 아카이브. 너무 어렵지 않습니다. UNIX 아카이브 파일의 형식은 documented입니다. 그러나 형식은 사용하는 UNIX 변형에 따라 달라질 수 있으며 수행하려는 작업에는 실제로 필요하지 않습니다.
아카이브로 어떻게합니까? 당신이 (당신이 준 objcopy --add-section
명령의 경우 것 같은), 다음 아카이브에서 다음 섹션을 추출, 하나 객체를 추출 .mysection
이 libmylib.a
에있는 모든 오브젝트 파일에 동일한 내용이 있는지 알고 있다면
:
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 libmylib.a | grep '\ .o $'는 내 시스템 (Fedora)에 아무 것도 인쇄하지 않지만 objdump -h libmylib.a | grep -o '[^] * \. o'작동. – ACyclic
@NYCBrit 'ar p'가 아니라 'ar t'이어야합니다. 미안합니다. –