간단한 디버거를 만들고 있는데 watch를 구현하고 싶습니다. 예를 들어 watch x라고 하면, x의 값이 변할 때 트랩을 발생시키게 하고 싶습니다. 이렇게 watch를 할 수 있는 변수의 수에는 제한이 없게 하고 싶고요. x가 항상 메모리에 있다고 가정하겠습니다. (gcc -g -O0)
x가 속한 페이지를 dirty하게 만들어서 그 페이지로 접근하는 I/O가 있으면 페이지 폴트를 일으킨 다음에 주소를 보고 주소가 x가 아니면 계속 진행, x면 컨트롤을 디버거로 넘기려고 하는데요.
디버거는 관리자 권한으로 수행되지 않고 그냥 유저 모드로 수행되는 응용 프로그램입니다.
그런 일반 유저 응용 프로그램에서 페이지 테이블 엔트리에 접근할 수 있는 API 같은 게 있나요? 구글 검색을 해도 잘 안 나오네요.
디버기 프로세스의 가상 메모리 주소에 대응되는 커널의 페이지 테이블 엔트리 비트를, 디버거 프로세스에서 조작하려고 합니다.