문제

쓰기로 작성된 페이지에 쓰기를 잡을 수있는 방법이 있습니까?

나는 당신이 그것을 인스턴스화하기 위해 객체를 복사하는 자체와 같은 객체 시스템을 계획하고 있습니다. (나머지와 비교할 때 간단하고 컴팩트 한 것으로 들리기 때문에) 분명히이 목적을 위해 생성 된 객체는 어떤 식 으로든 쓰기로 보호되어야합니다. 엘프의 프로그램 헤더에서 쓰기로 보호 된 무언가를 표시하는 방법이 있음을 알았습니다. (RE, RWE, RW -FLAGS)

이것이 쓰기 보호를 전혀 제공합니까? 나는 그것이 segfault를 키워야한다는 것을 기억합니다. 이것이 사실입니까? 쓰기를 쓰기로 보호하는 페이지로 작성하는 방법. 이것이 내가 원하는 것을 구현하는 좋은 방법이며 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

예, 사용할 수 있습니다 mprotect.

그렇습니다. 보호 된 메모리에 쓰면 segfault가 발생합니다. C ++에 핸들러를 설치할 수 있습니다.

std::signal(SIGSEGV, my_segv_handler_func);

이것은 당신이 원하는 것을 수행하는 그럴듯한 방법이지만, 당신은 그것을 작동시키기 위해 많은 추가 관리 goo를 추가해야합니다. 예를 들어, 이러한 종류의 쓰기 감지는 하드웨어에서 수행되며 X86 아키텍처에서는 페이지 크기가 4K입니다. 따라서 한 번에 4K를 보호하고 4K 경계에 정렬 될 수 있습니다. 일반적인 "주소 X에서 시작하고 N 바이트를 시작하십시오". 나는 당신이 필요하다고 믿습니다

  1. 페이지에 객체를 매핑하여 페이지에 쓰기가 특정 보호 객체에 쓰기인지 또는
  2. 항상 4K 경계에 할당되는 자신의 malloc을 굴려서 최소 Alloc'd 블록 크기 4K를 사용하도록합니다.

더 나은 방법이 있다면 내 머리 꼭대기를 알지 못하지만 놀리는 것이 재미있게 들립니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top