컴파일러가 생성 한 최종 이미지에는 bin 파일과 확장 로더 형식 ELf 파일이 모두 포함되어 있습니다. 두 파일의 차이점, 특히 ELF 파일의 유틸리티는 무엇입니까?
컴파일러가 생성 한 최종 이미지에는 bin 파일과 확장 로더 형식 ELf 파일이 모두 포함되어 있습니다. 두 파일의 차이점, 특히 ELF 파일의 유틸리티는 무엇입니까?
답변:
Bin 파일은 메모리 수정이나 재배치가없는 순수 이진 파일로, 특정 메모리 주소에로드 할 명시적인 명령이있을 가능성이 높습니다. 이므로....
ELF 파일은 심볼 조회 및 재배치 가능 테이블로 구성된 실행 가능 링크 가능 형식입니다. 즉, 커널에 의해 모든 메모리 주소에서로드 될 수 있으며 사용 된 모든 기호는 해당 메모리 주소에서 오프셋으로 자동 조정됩니다. 로드되었습니다. 일반적으로 ELF 파일에는 'data', 'text', 'bss'와 같은 여러 섹션이 있지만 몇 가지 ... 런타임이 기호의 메모리 참조를 조정할 위치를 계산할 수있는 섹션 내에 있습니다. 런타임에 동적으로.
bin 파일은 롬 또는 프로그램을 실행할 특정 주소로 들어가는 비트와 바이트입니다. 이 데이터를 그대로 가져 와서 직접로드 할 수 있습니다. 일반적으로 거기에없는 기본 주소가 무엇인지 알아야합니다.
elf 파일은 bin 정보를 포함하지만 다른 많은 정보, 가능한 디버그 정보, 기호로 둘러싸여 있으며 바이너리 내의 데이터와 코드를 구분할 수 있습니다. 둘 이상의 이진 데이터 청크를 허용합니다 (이 중 하나를 bin에 덤프하면 다음 블록에 채울 데이터를 채우는 하나의 큰 bin 파일을 얻게됩니다). 얼마나 많은 바이너리가 있고 0으로 초기화되기를 원하는 bss 데이터가 얼마나 있는지 알려줍니다 (gnu 도구는 bin 파일을 올바르게 생성하는 데 문제가 있음).
elf 파일 형식은 표준이며 arm은 표준에 대한 개선 사항 / 변형을 게시합니다. 나는 모두가 거기에 무엇이 있는지 이해하기 위해 엘프 구문 분석 프로그램을 작성하는 것이 좋습니다. 라이브러리에 신경 쓰지 마십시오. 스펙의 정보와 구조를 사용하는 것은 매우 간단합니다. .bin 파일을 만드는 일반적인 gnu 문제와 bin 또는 elf 출력을 엉망으로 만들 수있는 링커 스크립트 및 기타 사항을 디버깅하는 데 도움이됩니다.
일부 리소스 :
ELF 형식은 일반적으로 컴파일의 기본 출력입니다. GNU 도구 체인을 사용하는 경우 다음과 같이 objcopy를 사용하여 이진 형식으로 변환 할 수 있습니다.
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
또는 fromELF 유틸리티 사용 (ADS와 같은 대부분의 IDE에 내장 됨) :
fromelf -bin -o [binary-output-file] [elf-input-file]
NOP
없이-f
(또는-fbin
) 만 포함 된 파일을 컴파일하면0x90
.NET Framework가 포함 된 400 바이트 ELF 컨테이너 대신 단일 바이트로 컴파일됩니다-felf32
. 따라서 원시 코드 만 있고 컨테이너 메타 데이터는 없습니다. NASM은 MS-DOS .COM 및 .SYS 파일에 주로 사용된다고 말합니다 .section
지시문은 대부분 무시되며 정렬 만 생성합니다.