개체 파일에 몇 개의 섹션을 만들 수 있나요?

개체 파일에 몇 개의 섹션을 만들 수 있나요?

내가 따르는 과정Baking Pi – 운영 체제 개발. 그들은 그 안에 또 다른 섹션을 만들었습니다 .init.

그렇다면 (단지 아니라) 섹션을 얼마든지 생성할 수 있고 .data, .bss, .text그 중 어느 곳에나 코드와 데이터(no로 초기화됨)를 넣을 수 있습니까?

그렇다면 축제의 목적은 무엇인가?

답변1

초기 연구

언뜻 보면 대답은 '아니요'인 것 같습니다. ELF 사양에서는 다음 부분만 허용합니다.

C32/kernel/bin/.process.o
architecture: i386, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x00000000

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000333  00000000  00000000  00000040  2**4
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data         00000050  00000000  00000000  00000380  2**5
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  000003d0  2**2
                  ALLOC
  3 .note         00000014  00000000  00000000  000003d0  2**0
                  CONTENTS, READONLY
  4 .stab         000020e8  00000000  00000000  000003e4  2**2
                  CONTENTS, RELOC, READONLY, DEBUGGING
  5 .stabstr      00008f17  00000000  00000000  000024cc  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .rodata       000001e4  00000000  00000000  0000b400  2**5
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  7 .comment      00000023  00000000  00000000  0000b5e4  2**0
                  CONTENTS, READONLY

원천:http://wiki.osdev.org/ELF

Wikipedia와 같은 다른 소스에서도 가장 기본적인 부분 이름만 표시되므로 이러한 이름이 허용되는 것으로 믿게 됩니다. 추가 검색을 통해 다음 두 섹션이 드러났습니다.

.fini

이 섹션에는 프로세스 종료 코드를 용이하게 하는 실행 가능한 지침이 포함되어 있습니다. 즉, 프로그램이 정상적으로 종료되면 시스템은 이 코드 조각을 실행하도록 준비합니다.

. 내부에

이 섹션에는 프로세스 초기화 코드에 기여하는 실행 가능한 지침이 포함되어 있습니다. 즉, 프로그램이 실행되기 시작하면 시스템은 기본 프로그램 진입점(C 프로그램에서는 main이라고 함) 이전에 이 섹션의 코드를 실행하도록 배열합니다.

.init일부는 .fini특별한 용도로 사용됩니다. 이 섹션에 기능이 배치되면 .init시스템은 기본 기능보다 먼저 해당 기능을 실행합니다. 또한 이 섹션에 배치된 기능은 .fini기본 기능이 반환된 후 시스템에 의해 실행됩니다. 컴파일러는 이 기능을 활용하여 C++에서 전역 생성자와 소멸자를 구현합니다.

원천:http://l4u-00.jinr.ru/usoft/WWW/www_debian.org/Documentation/elf/node3.html

하지만 그래, 넌 어떤 부분이라도 가질 수 있어

하지만 고마워요@프로그래머실제 상황을 알려주세요.ELF 사양 v1.2, 1-16페이지에 다음과 같은 단락이 있습니다.

점(.)이 접두어로 붙은 섹션 이름은 시스템용으로 예약되어 있지만 기존 의미가 만족스러운 경우 응용 프로그램에서 이러한 섹션을 사용할 수 있습니다. 응용 프로그램은 시스템 부분과의 충돌을 피하기 위해 접두사 없이 이름을 사용할 수 있습니다. 객체 파일 형식을 사용하면 위 목록에 없는 부분을 정의할 수 있습니다. 개체 파일에는 동일한 이름을 가진 여러 부분이 있을 수 있습니다.

따라서 프로그램이 어떤 부분을 사용하려는지에 따라 모든 것이 달라지는 것 같습니다.

답변2

허용되는 섹션과 섹션 이름은 파일 형식에 따라 다릅니다. ELF의 경우,형식 정의그 중 일부와 목적을 정의한 후 다음과 같이 말합니다.

점(.)이 접두어로 붙은 섹션 이름은 시스템용으로 예약되어 있지만 기존 의미가 만족스러운 경우 응용 프로그램에서 이러한 섹션을 사용할 수 있습니다. 응용 프로그램은 시스템 부분과의 충돌을 피하기 위해 접두사 없이 이름을 사용할 수 있습니다. 객체 파일 형식을 사용하면 위 목록에 없는 부분을 정의할 수 있습니다. 개체 파일에는 동일한 이름을 가진 여러 부분이 있을 수 있습니다.

그렇습니다. 원하는 이름으로 섹션을 만들 수 있습니다. 시스템에서 섹션을 처리하는 방식은 유형과 속성에 따라 결정됩니다.

관련 정보