Linux에서 특정 "실행 가능 형식"에 대한 로더를 구성할 수 있습니까?

Linux에서 특정 "실행 가능 형식"에 대한 로더를 구성할 수 있습니까?

이 질문은 계속된다 컴파일러가 메모리에 코드를 배치하는 방법 이 내용은 Stack Overflow에 게시되었습니다.

ldLinux에서 사용할 수 있는 (GNU) 유틸리티에 대해 몇 가지 질문이 있습니다 .

예를 들어 프로그램이 셸에서 실행될 때마다 ./a.out셸은 ld로 표시되는 프로그램을 로드합니다 a.out.

  1. ld셸은 를 사용하여 로드 해야 한다는 것을 어떻게 알 수 있습니까 ? ELF 형식인지 확인하기 위해 a.out스캔하고 그렇다면 사용합니까 ? 특정 형식의 실행 파일 이름을 지정하는 규칙이 없기 때문에 확실히 파일 확장자를 사용할 수 없습니다.a.outld

  2. 유틸리티는 ldELF 외에 다른 실행 가능 형식으로 표현된 프로그램을 로드할 수 있습니까?

  3. 내가 "xyz"라고 말하는 나만의 실행 파일 형식을 생각해낸 다음 abc그러한 실행 파일을 처리하기 위해 나만의 로더를 작성한다고 가정해 보겠습니다. 그렇다면 "로더를 사용하여 abc특정 실행 가능 형식 "xyz"로 컴파일된 프로그램을 로드하도록 구성할 수 있는 셸 명령이 있습니까 ?

답변1

  1. 쉘은 모르지만 커널은 알고 있습니다. 바라보다Linux에는 어떤 유형의 실행 파일이 있습니까?자세한 내용은 링크된 기사를 참조하세요. 커널 로더는 바이너리를 로드하고 필요한 경우 해당 인터프리터( ld.so동적 바이너리의 경우)를 로드합니다.

  2. 각 구현은 ld.so형식별로 다릅니다.

  3. 예, 커널에 바이너리 로더를 추가하거나 binfmt_misc.see 를 사용하면 가능합니다.모노의 놀라운 점은 무엇인가요?더 알아보기.

관련 정보