안녕하세요, x86 리눅스 커널(32비트)에서 가상메모리주소에 매핑된 물리메모리주소를
얻어내는 방법에 대해서 질문합니다.
커널에 모듈을 올리고, 그 모듈상에서 특정 커널메모리주소가 매핑된 PFN 을 찾고싶은데요
단, highmem 영역 이후의, 즉 단순히 vir_to_phy 같은거로 0xc0000000 더하고빼서 얻는거 말고
실질적으로 2레벨 페이징을 거쳐서 얻어지는 주소를 이야기하는 것입니다.
먼저 cr3 레지스터에 로드되는 페이지 디렉토리의 주소는 가상주소이고, 커널모듈상에서
cr3 의 값을 가져오는건 해당 모듈을 호출하는 application context 에서의 값을 가져오는것이라, 커널 페이지디렉토리 주소를
가져올수 없다고 알고있습니다. 그래서 커널 심볼중에 swapper_pg_dir? 이었나, 이것이
커널 페이지디렉토리의 가상주소(0xC000...) 를 가지고있다는걸 알아내서
해당 메모리를 덤프해서 커널 페이지 디렉토리의 엔트리들을 얻는데는 성공했습니다.