2010-11-25 4 views
1

WinXP 32 비트 용 DDK (상당히 오래된 버전 : 3590)에 문제가 있습니다. 내 드라이버에는 일부 정적 변수가 포함되어 있습니다 (일부는 .bss 섹션에 할당해야합니다). 일부 기능은 페이징 가능한 코드 섹션 (#pragma alloc_page (PAGE, func)으로 표시)에 있습니다. 페이징 가능한 코드는 별도의 오브젝트 파일에 수집됩니다. 나는 링커가 statics와 페이징 가능한 코드를 커널 주소 공간의 같은 페이지에 할당하는 것으로 보인다. (즉, 변수는 0xEFFCB0A0이고 함수는 0xEFFCB600이다 - windbg로 검증 됨). 정적 변수는 인터럽트 환경에서 사용되므로 페이지가 메모리에 잠겨 있어야합니다. 그러나 동일한 페이지에 스왑 가능 코드가 포함되어 있으면 변수가 갑자기 사라질 수 있습니다. 링커의지도는 페이지 가능 코드가 다른 섹션 ("PAGE")에 있지만 오프셋 ("Rva + Base")이 통계를 포함하는 페이지의 중간에 있음을 올바르게보고합니다.#pragma alloc_text (PAGE) 코드가 페이지 정렬되지 않음

링커/로더가 페이지 가능 코드에 별도의 페이지를 할당하도록하려면 어떻게해야합니까? 일부 "#pragma"가 섹션 정렬을 강제 실행합니까? 내가 뭔가 잘못하고 있는거야?

추 신 : 드라이버 로더는 페이징 된 풀에서 변수와 코드를 모두 포함하는 페이지를 넣을만큼 똑똑하지만 페이지에 변수가 있으므로 쓰기 가능해야합니다. 나는 실행 코드가 읽기 전용 페이지에 있었으면 좋겠다. 커널 모드에서의 잘못된 배열 접근은 아직 디버그하기가 어렵습니다 ...

PPS : 내 함수 전후에 4096 "nop"을 추가했습니다. 좋습니다. 제안 할만한 것이 없습니다.

+0

우와, 그 질문은 여기에 오랫동안 매달려있었습니다. 드라이버 실행 코드가 일반적으로 읽기 전용입니까? 결국 코드를 ​​읽기 전용으로 만드는 것은 오히려 최근의 "추세"인 것처럼 보입니다. – Ilya

답변

1

장소 자신의 데이터 세그먼트에 전역 :

#pragma data_seg("NONPAGE") 
// declare your globals here 
#pragma data_seg() 

출처 : 당신의 섹션 것 기본적으로 MSDN link on data_seg

페이지 된 플래그가 아닌 읽기/쓰기로 작성되어야합니다.

추가 섹션 옵션을 지정할 수 있습니다

#pragma comment(linker, "/section:NONPAGE,ERW") 

소스 : MSDN link on /SECTION

하거나 SOURCES 파일에 링커 옵션 배치 할 수 있습니다 :

LINKER_FLAGS = $(LINKER_FLAGS) /SECTION:NONPAGE,ERW 

참고 : 당신이 구축하는 경우 라이브러리 대신 LIBRARIAN_FLAGS을 사용하십시오.

0

솔직히, 저는 빌드 번호가있는 DDK (또는 OS 빌드)에 대해 알지 못하기 때문에 3790 또는 3790.1830에 대해 이야기하고 있다고 가정합니다.

죄송합니다. 질문이별로없는 것 같습니다. 메모리가 쓰기 가능한지 여부는 액세스가 이루어지는 MDL에 전적으로 달려 있습니까? 그렇지 않습니다.

그렇지 않으면 OSR (특히 NTDEV) 이상에서 특정 주제에 대해 훨씬 더 활발한 토론을 할 수 있습니다. 그것은 당신이 일반적인 프로그래밍 주제로 포럼에서보고 기대했던 것이 아니다)

+0

내 "문제"(실제로는 진짜 문제가 아니라 관심사)는 드라이버의 코드 페이지가 정적 변수를 포함하지 않는 한 일반적으로 읽기 전용 (windb로 확인)이라는 것입니다.변수가 다른 페이지에 저장되면 쓰기 가능한 코드가 없습니다. 읽기 전용 코드는 나쁜 포인터 또는 잘못된 배열 인덱스로 인해 손상 될 수 없으므로 일반적으로 좋은 방법입니다. 안녕! –

+0

"메모리에 쓸 수 있는지 여부는 액세스가 이루어지는 MDL에 따라 다릅니다. 그렇지 않습니까?" 예 ... 아니오 : 드라이버 코드의 경우 커널 드라이버 로더가 메모리를 관리합니다. 내가 아는 한 프로그래머는 로더의 동작을 제어 할 수있는 능력이 매우 제한적입니다. –

관련 문제