내가 따르는 과정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
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의 경우,형식 정의그 중 일부와 목적을 정의한 후 다음과 같이 말합니다.
점(.)이 접두어로 붙은 섹션 이름은 시스템용으로 예약되어 있지만 기존 의미가 만족스러운 경우 응용 프로그램에서 이러한 섹션을 사용할 수 있습니다. 응용 프로그램은 시스템 부분과의 충돌을 피하기 위해 접두사 없이 이름을 사용할 수 있습니다. 객체 파일 형식을 사용하면 위 목록에 없는 부분을 정의할 수 있습니다. 개체 파일에는 동일한 이름을 가진 여러 부분이 있을 수 있습니다.
그렇습니다. 원하는 이름으로 섹션을 만들 수 있습니다. 시스템에서 섹션을 처리하는 방식은 유형과 속성에 따라 결정됩니다.