page table entry의 bit을 set하거나 clear하고 싶습니다

글쓴이: 익명 사용자 / 작성시간: 목, 2020/02/13 - 7:41오전
간단한 디버거를 만들고 있는데 watch를 구현하고 싶습니다. 예를 들어 watch x라고 하면, x의 값이 변할 때 트랩을 발생시키게 하고 싶습니다. 이렇게 watch를 할 수 있는 변수의 수에는 제한이 없게 하고 싶고요. x가 항상 메모리에 있다고 가정하겠습니다. (gcc -g -O0)
x가 속한 페이지를 dirty하게 만들어서 그 페이지로 접근하는 I/O가 있으면 페이지 폴트를 일으킨 다음에 주소를 보고 주소가 x가 아니면 계속 진행, x면 컨트롤을 디버거로 넘기려고 하는데요.
디버거는 관리자 권한으로 수행되지 않고 그냥 유저 모드로 수행되는 응용 프로그램입니다.
그런 일반 유저 응용 프로그램에서 페이지 테이블 엔트리에 접근할 수 있는 API 같은 게 있나요? 구글 검색을 해도 잘 안 나오네요.
디버기 프로세스의 가상 메모리 주소에 대응되는 커널의 페이지 테이블 엔트리 비트를, 디버거 프로세스에서 조작하려고 합니다.
Forums:
당연히 없습니다.
당연히 없습니다. 구현하실려면 그 기능을 수행하는 전용 커널 모듈 만드셔야 할겁니다.
만일 있다면 다른 프로세스의 메모리를 손쉽게 들여다보고 조작할 수 있는거고, 옛날 도스처럼 되는겁니다.
커널에서 제공하는 메모리 관련 api들은 프로세스간 메모리 공유를 위한 공유메모리 매핑이나 user level driver 등을 위해 특정 물리주소를 프로세스에게 매핑해주는것까지가 한계입니다.
Written By the Black Knight of Destruction
댓글 달기