2017-02-19 11 views
0

objcopy -o binary을 사용하여 elf 파일에서 생성 된 원시 바이너리를 만들었습니다. 주어진 오프셋만큼 재배치가 가능합니까? 내가 검색하는 효과는 --change-addresses 옵션을 사용하는 것과 유사 할 것이라고 생각하고 이진으로 변환합니다. 바이너리를 재배치 할 수 있습니까?

man obdjdump 미연

답변

0

부탁드립니다 :

objcopy의는 출력 타겟을 사용하여 원시 이진 파일을 생성하는데 사용될 수있는 바이너리 (예를 들면, 사용 -O 이진). objcopy가 원시 이진 파일을 생성 할 때 입력 객체 파일 내용의 메모리 덤프를 생성하는 것은 본질적으로
입니다. 모든 기호 및 재배치 정보가 삭제됩니다. 메모리 덤프는 출력 파일에 복사 된 가장 낮은 섹션의로드 주소에서 시작합니다.

(내게로 강조) 서로 다른 장소에서로드되는 여러 섹션을 수출하지 않는 한

그래서, 당신은 바이너리로 밀고있는 하나의 섹션을 이동 효과가 없습니다.

+0

내가 무슨 뜻인지 알지 못합니다. 이 코드는 실제 물리적 주소 공간의 임베디드 환경에서 실행됩니다. 실제로 단일 섹션을 이동하는 것이 중요합니다. 바이너리는로드 될 특정 위치에서 실행되도록 준비되어야합니다. – joseCM

+0

하지만'-O 바이너리 '가 생성하는 바이너리 종류는 아닙니다. "메모리 덤프는 가장 낮은 섹션의로드 주소에서 시작합니다". 따라서 어디에서 시작하든 관계없이 하나의 섹션 만 있으면 시작은 항상 바이너리 덤프의 시작이됩니다. –

+0

물론입니다. 그러나 링커 스크립트에서 실제 VMA 주소는 관심있는 주소 범위로 지정됩니다. 예를 들어 글로벌 변수가 주소 X에 있으면 코드에서 해당 주소를 참조합니다. 변수를 참조하는 코드 (현재 X + OFFSET에있을 것임)가 올바른 주소를 참조하도록 변경되도록 이진을 변경하려고합니다. – joseCM