2012-10-04 11 views
1

Linux에서 이진 섹션 fron a .a 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)는 라이브러리에 넣거나 다시 추출 할 때 변경되지 않습니다 (비트 동일 복사를 얻음).

은 내가 보관 파일

당신 사용 dd에서 바이너리 정보를 추출하는 DD를 사용할 수있는 예상하지만, 먼저 각 개별 오브젝트 파일의 위치를 ​​찾아야 할 것 아카이브. 너무 어렵지 않습니다. UNIX 아카이브 파일의 형식은 documented입니다. 그러나 형식은 사용하는 UNIX 변형에 따라 달라질 수 있으며 수행하려는 작업에는 실제로 필요하지 않습니다.

아카이브로 어떻게합니까? 당신이 (당신이 준 objcopy --add-section 명령의 경우 것 같은), 다음 아카이브에서 다음 섹션을 추출, 하나 객체를 추출 .mysectionlibmylib.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.$$ 
+0

ar libmylib.a | grep '\ .o $'는 내 시스템 (Fedora)에 아무 것도 인쇄하지 않지만 objdump -h libmylib.a | grep -o '[^] * \. o'작동. – ACyclic

+0

@NYCBrit 'ar p'가 아니라 'ar t'이어야합니다. 미안합니다. –