2017-11-16 3 views
6

가상 메모리 끝에 특수 섹션이있는 프로그램을 만들고 싶습니다. 그래서 나는이 같은 링커 스크립트 뭔가를하고 싶어 :링커 스크립트로 시작 스택 포인터를 명시 적으로 설정하십시오.

/* ... */ 
.section_x 0xffff0000 : { 
    _start_section_x = .; 
    . = . + 0xffff; 
    _end_section_x = .; 
} 

문제는 그 GCC/LD/glibc는이 알려진 겹치는 경우에도 32 비트 응용 프로그램에 대해 기본적으로이 위치에 스택을로드하는 것 섹션. 위의 코드 0은 스택에서 예외를 발생시킵니다. 스택에 다른 VM 메모리 위치를 사용하도록 링커에 지시 할 수있는 방법이 있습니까? (물론, 나는 힙이 가상 메모리의이 부분을 확장하지 않도록하고 싶다 ...).

+0

대상에 대한 자세한 정보를 제공해야합니다. 초기 레지스터 내용 (스택 위치를 결정 함)은 대상에 따라 다릅니다. –

+0

이것은 arm-8 시스템 (32 비트 모드에서 컴파일)입니다. gcc 4.7.0 툴체인으로 리눅스 3.10 커널을 사용하고 있습니다. – HardcoreHenry

답변

1

나는 그 질문에 대한 답을 싫어하거나 질문이 틀린 지 물어 보지만, 64k 세그먼트가 필요하다면 왜 시동 할 때 할당 할 수 없습니까?

왜 프로세스 주소 공간에서 고정 주소가 필요할 수 있습니까? 저는 거의 30 년 동안 다양한 종류의 코딩을 해오 고 있으며, 보호 된 메모리의 출현 이후 고정 주소가 필요하다는 것을 보지 못했습니다.

+0

아쉽게도 질문이 잘못되었습니다. 포인터의 다양한 비트에 특별한 의미를 할당 할 수있는 기능으로 기존 시스템을 수정합니다. 따라서 특별한 목적을 위해 0xffff0000 주소 범위를 예약해야합니다. – HardcoreHenry

+0

@HardcoreHenry 누구든지이 시스템을 만든 사람이라면 누구나 "우아함"이라고 묘사 할 것입니다. 그러나 나는 당신을 포함하여 세상의 99 %가 이것을 악으로 생각한다고 생각합니다. 즉, 왜 이런 불규칙한 포인터가 유효한 주소를 해결해야합니까? 일부 추상화 계층은 고정 된 메모리 주소를 요구하지 않고 추가 기능을 제공 할 수 있습니까? 그들은 그 비트가 설정된 구조체를 가리킬 수 있습니다. 포인터를 역 참조하는 것은 lookaside를 수행하는 방법을 알고있는 루틴에 의해 수행 될 수 있습니다. –

관련 문제