2016-07-28 17 views
1

ELF 파일의 섹션을 제거하고 약간 수정 된 내용으로 다른 섹션으로 대체해야하는 프로젝트가 있습니다. 먼저 원본 섹션을 제거한 다음 objcopy를 사용하여 원하는 섹션을 추가 할 수있었습니다. 그러나 나는 항상 다음과 같은 경고를받습니다 :objcopy 또는 libelf를 사용하여 elf 파일의 섹션을 대체하여 메모리에로드되는 방법?

warning: allocated section `.nv_fatbin' not in segment 

이로 인해 섹션이 메모리에로드되지 않아 원하는 기능이 달성되지 않습니다.

세그먼트를 추가하고 세그먼트로 다시 가져 오는 가장 좋은 방법은 무엇입니까?

libelf? 또는 objcopy를 사용하여이 작업을 수행 할 수 있습니까?

+0

링커 스크립트입니다. https://cygwin.com/ml/binutils/2003-05/msg00704.html. platofrm/tools가 무엇을 사용하는지 알려주는 것이 현명합니다 –

+0

표준 우분투 시스템에서 바이너리를 편집하려고했습니다. 불행히도, 필자가이 새로운 것에 대해 필자는이 점에서 링커 스크립트 접근법을 완전히 이해하지 못했습니다. 또한 소스 코드에 액세스 할 수 없습니다. 링커 스크립트가 순수하게 바이너리에서 작동합니까? – Abhay

+0

아니요, 이진 파일을 만들 때 링커 스크립트가 함께 작동하면 링커 스크립트가 작동합니다. –

답변

1

objcopy의 --update-section 옵션을 사용할 수 있습니다. objcopy의 매뉴얼에서

추출 (https://sourceware.org/binutils/docs/binutils/objcopy.html) :

--update 섹션 sectionname = 파일 이름

파일 이름의 내용으로 섹션 이름 sectionname의 기존 내용을 교체합니다. 섹션의 크기는 파일 크기로 조정됩니다. sectionname에 대한 섹션 플래그는 변경되지 않습니다. ELF 형식 파일의 경우 세그먼트 매핑 매핑도 변하지 않습니다. 이는 --remove-section 다음에 --add-section을 사용할 수 없습니다. 이 옵션은 두 번 이상 지정할 수 있습니다.

참고 :이 경우 binutils v2.26 이상이 필요합니다.