이 질문은 계속된다 컴파일러가 메모리에 코드를 배치하는 방법 이 내용은 Stack Overflow에 게시되었습니다.
ld
Linux에서 사용할 수 있는 (GNU) 유틸리티에 대해 몇 가지 질문이 있습니다 .
예를 들어 프로그램이 셸에서 실행될 때마다 ./a.out
셸은 ld
로 표시되는 프로그램을 로드합니다 a.out
.
ld
셸은 를 사용하여 로드 해야 한다는 것을 어떻게 알 수 있습니까 ? ELF 형식인지 확인하기 위해a.out
스캔하고 그렇다면 사용합니까 ? 특정 형식의 실행 파일 이름을 지정하는 규칙이 없기 때문에 확실히 파일 확장자를 사용할 수 없습니다.a.out
ld
유틸리티는
ld
ELF 외에 다른 실행 가능 형식으로 표현된 프로그램을 로드할 수 있습니까?내가 "xyz"라고 말하는 나만의 실행 파일 형식을 생각해낸 다음
abc
그러한 실행 파일을 처리하기 위해 나만의 로더를 작성한다고 가정해 보겠습니다. 그렇다면 "로더를 사용하여abc
특정 실행 가능 형식 "xyz"로 컴파일된 프로그램을 로드하도록 구성할 수 있는 셸 명령이 있습니까 ?
답변1
쉘은 모르지만 커널은 알고 있습니다. 바라보다Linux에는 어떤 유형의 실행 파일이 있습니까?자세한 내용은 링크된 기사를 참조하세요. 커널 로더는 바이너리를 로드하고 필요한 경우 해당 인터프리터(
ld.so
동적 바이너리의 경우)를 로드합니다.각 구현은
ld.so
형식별로 다릅니다.예, 커널에 바이너리 로더를 추가하거나
binfmt_misc
.see 를 사용하면 가능합니다.모노의 놀라운 점은 무엇인가요?더 알아보기.