![elf 헤더에 있는 MIPS 플래그의 의미](https://linux55.com/image/96608/elf%20%ED%97%A4%EB%8D%94%EC%97%90%20%EC%9E%88%EB%8A%94%20MIPS%20%ED%94%8C%EB%9E%98%EA%B7%B8%EC%9D%98%20%EC%9D%98%EB%AF%B8.png)
일부 elf 파일의 헤더를 살펴보던 중 이상한 점을 발견했습니다.
ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: MIPS R3000
Version: 0x1
...
Flags: 0x80000027, noreorder, pic, cpic, abi2, mips64r2
...
ELF32로 표시되어 있지만 mips64r2 플래그가 있는 이유는 무엇입니까? 이것은 무엇을 의미 하는가? 이는 파일이 64비트 프로세서에서 실행되도록 32비트 프로그램으로 컴파일되었다는 의미입니까?
또한 mips64r2에서 실행되는 경우 머신에 MIPS r3000이라는 라벨이 붙은 이유는 무엇입니까?
qemu로 실행하려면 어떤 환경이 필요합니까? mips64 r2? 밉스 r3000?
답변1
저는 임베디드 Linux 전문가는 아니지만 최근 Busybox 라우터에 "Hello World" 애플리케이션을 작성하는 작업을 하고 있습니다. 또한 라우터의 프로세서 유형은 동일합니다(MIPS R3000).
많은 임베디드 장치와 마찬가지로 라우터에도 Linux가 내장되어 있습니다. 프로세서와 아키텍처는 다르지만 Linux 시스템이기 때문에 동일한 실행 파일 형식인 ELF32/64를 지원합니다.
머신을 "MIPS R3000"으로 표시하고 플래그를 "mips64r2"로 표시하는 이유는 대상 아키텍처와 특정 프로세서 유형을 나타냅니다. 서로 다른 프로세서는 동일한 아키텍처를 사용할 수 있으며, 동일한 아키텍처는 서로 다른 플래그를 볼 수 있습니다. 그러나 한 가지 내 관심을 끌었던 것은 R3000이 32비트 아키텍처라는 것입니다. 제 경우에는 플래그가 "mips32"이므로 32비트 아키텍처에 mips64r2가 있고 32비트 ELF 파일(64비트인 것 같습니다)은 다음과 같습니다. 조금 이상합니다.
MIPS 공식 문서를 확인해 보세요. 도움이 되었으면 좋겠습니다