2012-01-03 6 views
0

내가 0x00000001에서 RAM 데이터를 읽고는 하드 디스크에있는 파일 (단지 학습!)에 복사하려고 그래서 내가 쓴 컴파일하고드라이버를 사용하여 특정 위치에서 RAM 데이터 읽기?

#include <ntddk.h> 

    void DriverUnload(PDRIVER_OBJECT pDriverObject) 
    { 
     DbgPrint("Driver Unloaded!"); 
    } 


    NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) 
    { 
      DWORD *pointer; 
      pointer = 0x00000001; 

      DriverObject->DriverUnload = DriverUnload; 

     DbgPrint("Driver Loaded!\n"); 

      DbgPrint("Data at 0x00000000 is %x\n",*pointer); 
     return STATUS_SUCCESS; 
    } 

그래서 난 BSOD는 다행히 내가이 실행되고있어 실행 내 Vmware 사용하기 :-) 나는 항상 앱 프로그램에만 메모리에서 직접 읽을 수있는 권한이 없다고 생각했다.

이제 내 질문은 드라이버가 직접 물리적 주소 또는 가상 주소를 사용합니까 ??? & 포인터가 드라이버 프로그래밍 (링 1 또는 2)의 경우와 같이 실제 또는 가상을 반환하는 값의 유형을 의미합니다. 링 3 앱이 가상 주소를 반환한다는 것을 알고 있습니다. 그리고 나는 이미 운전사 책을 읽기 시작하기 만하면 더 빨리 알고 싶었다.

답변

1

아니요, 커널은 가상 주소를 사용합니다. 이것은 링과 관련이 없으며 페이지 액세스 권한에만 영향을 미칩니다. 실제 주소에 액세스하려면 "MmMapIoSpace"(here) 커널 기능을 사용하십시오. 반환 된 포인터는 메모리 액세스에 적합합니다.

관련 문제