프로세스와 해당 mm_struct에 대한 액세스 권한이 있다고해서 매핑 중 하나를 변경하거나 매핑을 제거하고 임시 테이블을 만들 수있는 방법이 있습니까? 페이지보다 작은 금액을 할당하고 메모리에 기록 할 수 있습니까?리눅스 커널의 사용자 프로세스에 대한 페이지 맵핑 변경하기
예를 들어, ADD 명령에서 쓰기 오류를 처리하십시오. 나는 상대적으로 쉽게 오류의 주소와 크기를 얻을 수있다. 로컬로 8 바이트 (가장 큰 단일 명령 크기)를 할당하고 오류가있는 가상 주소가 해당 8 바이트의 첫 번째 바이트를 가리 키도록 매핑을 엉망으로 만듭니다. 그런 다음 다른 페이지를위한 데이터를 가져온 다음 원래 페이지를 다시 매핑으로 복원하라는 지시를 한 단계 씩 수행합니다. 프로세스의 가상 메모리 영역에서 페이지가 아닌 다른 것을 사용할 수 있는지 궁금합니다.
메모리 오버 헤드가 그리 크지 않기 때문에 사실입니다. 페이지 크기는 처음 8 바이트 만 사용 하긴하지만 4,8k 정도입니다. sidenote로서, (커널 공간에서) 사용자 공간 명령을 단일 단계로 진행하는 가장 쉬운 방법을 알고 계신가요? –
@Jesus : 정확하게 모르겠지만 [ptrace()'] (http://linux.die.net/man/2/ptrace)에서 사용 된 코드를 살펴보고 ' PTRACE_SINGLESTEP' 요청입니다. – Karmastan