2010-05-24 2 views
7

현재 컴파일 된 ELF 실행 파일에 데이터를 추가하는 방법, 즉 파일을 다시 컴파일하지 않고 실행 파일에 포함시키는 방법을 찾고 있습니다.파일을 ELF 실행 파일로 패킹

cat myexe mydata > myexe_with_mydata을 사용하면 쉽게 할 수 있지만 원본 실행 파일의 크기를 알지 못하기 때문에 실행 파일의 데이터에 액세스 할 수 없습니다.

누구에게 어떻게 구현할 수있는 아이디어가 있습니까? 실행 파일에 섹션을 추가하거나 특수 마커 (예 : 0xBADBEEFC0FFEE)를 사용하여 실행 파일의 데이터 시작 부분을 감지하는 방법을 생각했지만 더 아름다운 방법이 있는지 모르겠습니다.

미리 감사드립니다.

답변

5

당신은 objcopy의 (1)와 특별 섹션으로 ELF 파일에 파일을 추가 할 수 있습니다 oldelf가되지 않습니다 (

objcopy --addsection sname=file oldelf newelf 

이 oldelf 및 newelf하는 결과를 기록 할 파일을 추가합니다 수정 됨) libbfd을 사용하여 elf 파일을 읽고 이름별로 섹션을 추출하거나 섹션 테이블을 읽고 섹션을 찾는 코드를 직접 롤백 할 수 있습니다. 시스템이 예상하는 것과 충돌하지 않는 섹션 이름을 사용해야합니다. 이름이 .으로 시작하지 않는 한 괜찮습니다.

+0

objcopy가 그렇게 할 수 있는지 몰랐습니다. 감사. –

1

나는 이라는 작은 라이브러리를 만들었으며 objcopy을 사용하여 삽입 된 섹션을 추출/참조하기위한 간단한 인터페이스를 제공합니다. 이렇게하면 오프셋/크기를 다른 도구로 전달하거나 파일 설명자를 사용하여 런타임에서 직접 참조 할 수 있습니다. 바라기를 이것은 미래에 누군가를 도울 것입니다.

이 방법은 심볼로 컴파일하는 것보다 효율적입니다. 외부 도구가 추출 할 필요없이 데이터를 참조 할 수 있고, 전체 바이너리를 순서대로 메모리에로드 할 필요가 없으므로 그것을 추출/참조하십시오.

관련 문제