2013-11-01 5 views
0

gcc로 elf 이미지에 바이너리 파일을 삽입 할 때 자동 생성 된 _binary_*_size 심볼의 주소를 변경하는 방법이 있습니까? _binary_*_start_binary_*_end 기호와 달리 _binary_*_size 기호는 코드의 기본 주소를 따르지 않는 것 같습니다. 그들은 bfd 절대 절 (*ABS*)에 있습니다. 예를 들어bfd 크기 기호를 재배치하는 방법은 무엇입니까?

:

$ arm-linux-gnueabihf-gcc -nostdlib -Wl,-Ttext=0x80000000,--format=binary,foo.bin,--format=default boot.S 
$ arm-linux-gnueabihf-nm a.out | sort 
00000010 A _binary_foo_bin_size 
80000000 T _start 
80008004 D _binary_foo_bin_start 
80008014 D _binary_foo_bin_end 
80008014 A __bss_start 
80008014 A __bss_start__ 
80008014 A __bss_end__ 
80008014 A _bss_end__ 
80008014 A _edata 
80008014 A _end 
80008014 A __end__ 

나는 0x80008*** 대신 0x00000***에있을 _binary_foo_bin_size을하고 싶습니다. (내 자신의 링커 스크립트를 작성하지 않거나 여분의 objcopy 명령을 사용하지 않는 것이 좋습니다.)

답변

0

_size 기호는 섹션의 크기를 기록한다고 생각합니다. 따라서이 기호를 상쇄하면 더 이상 크기가 기록되지 않습니다.

왜 이렇게해야하는지 궁금합니다. 너는 말하지 않았다. 어쩌면 목표 달성을위한 다른 방법이있을 수 있습니다.

+0

내 보드에 ELF를로드 할 때 디버거가 내 보드의 부트 ROM에있는 0x00000010 주소에 _size 데이터를 쓰려고하기 때문에 _size 심볼을 제거해야합니다. – Dominic

+0

어떤 디버거입니까? –

+0

또한 쓸만한 데이터가 있다는 것에 놀랐습니다. 나는 심볼을 제거하려고 더 직접적으로 시작할 것이라고 생각한다. –

관련 문제