a.out - 텍스트 세그먼트가 공유되지 않는 경우 데이터 세그먼트와 텍스트 세그먼트가 연속되어 있습니다. 왜 그럴까요?

a.out - 텍스트 세그먼트가 공유되지 않는 경우 데이터 세그먼트와 텍스트 세그먼트가 연속되어 있습니다. 왜 그럴까요?

나는 고대 a.out 형식 매뉴얼 페이지(위치:여기), Unix 실행 파일 형식의 발전을 이해하려고 노력하고 있습니다. 한 가지 알고 싶습니다. 매뉴얼 페이지에는 매직 넘버가 OMAGIC이면 텍스트 세그먼트가 다른 프로세스와 공유되지 않고 쓰기 금지되어 있지 않으며 데이터 세그먼트가 메모리에서 바로 다음 바이트에서 시작된다고 나와 있습니다. 그러나 매직 넘버가 NMAGIC 또는 ZMAGIC인 경우 텍스트 세그먼트는 쓰기 금지되어 있으며 동일한 프로그램을 실행하는 다른 프로세스와 공유됩니다. 이 경우 데이터 세그먼트는 다음 1024바이트 블록의 시작 부분에서 시작됩니다. 왜 그럴까요? 공유 텍스트 세그먼트에 1024바이트 경계에서 시작하는 데이터 세그먼트가 필요한 이유는 무엇입니까? 나는 이것이 a.out 형식에만 국한되지 않고 일반적으로 적용 가능하다고 생각합니다.

답변1

이는 페이지 경계에 데이터 세그먼트를 정렬하기 위해 수행됩니다(자동으로 텍스트 세그먼트와 다른 페이지에 위치하도록 강제). 이 단서를 사용하면 John Levine과 같은 더 많은 정보를 찾을 수 있습니다.링커 및 로더.

관련 정보