ELF 바이너리에서 파일을 실행할 때마다 다음과 같은 결과가 나타납니다.
[jonescb@localhost ~]$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9,
not stripped
이 바이너리가 2.6.8에서 실행되는 것을 방지하기 위해 Linux 2.6.9에서 무엇이 변경되었는지 궁금합니다. Linux 2.0에는 ELF 지원이 추가되지 않았습니까?
답변1
glibc
--enable-kernel
지원되는 최소 커널 버전을 지정할 수 있는 구성 옵션이 있습니다 . 객체 파일이 이 glibc 버전과 연결되면 링커는 .note.ABI-tag
이 최소 커널 버전을 포함하는 결과 실행 파일에 SHT_NOTE 섹션을 추가합니다. 정확한 형식은 다음에 정의되어 있습니다.최하위 비트, 그리고 file
그 부분을 찾아 해석하는 방법을 알아보세요.
특정 glibc 빌드에 2.6.9가 필요한 이유는 누가 빌드했는지에 따라 다릅니다. 내 시스템(Gentoo)에서도 마찬가지입니다. glibc ebuild의 주석에는 2.6.9가 2.6.9에 필요한 최소 버전이기 때문에 2.6.9를 지정한다고 나와 있습니다.NPTL, 따라서 이것이 일반적인 선택일 수 있습니다. 다른 하나는등장한 것 같다최소 요구 사항이므로 2.4.1입니다.리눅스 스레드, NPTL 이전에 사용된 패키지