Domanda

Esiste un modo per catturare una scrittura in una pagina protetta da scrittura?

Ho intenzione di fare un sistema a oggetti auto-simile in cui si copia l'oggetto per istanziarlo. (perché sembra una cosa semplice e compatta rispetto al resto) Ovviamente, gli oggetti creati per questo scopo dovrebbero essere protetti in qualche modo dalla scrittura. Ho visto che esiste un modo per contrassegnare qualcosa protetto da scrittura dalle intestazioni del programma nell'ELF. (RE, RWE, RW-flag)

Fornisce una protezione dalla scrittura? Ricordo che dovrebbe sollevare un segfault, è vero? Come catturare la scrittura in una pagina protetta da scrittura. È un buon modo per attuare ciò che desidero e c'è un modo migliore?

È stato utile?

Soluzione

Sì, puoi utilizzare mprotect .

Sì, una scrittura nella memoria protetta genererà un segfault. È possibile installare un gestore, ad es. in C ++:

std::signal(SIGSEGV, my_segv_handler_func);

Questo è un modo plausibile di fare quello che vuoi, anche se per farlo funzionare dovresti aggiungere un sacco di risorse extra di gestione. Ad esempio, questo tipo di rilevamento della scrittura viene eseguito in hardware e su architetture x86 hai una dimensione di pagina di 4k. Quindi puoi proteggere le cose 4k alla volta, allineate su confini 4k - non un generico "inizia dall'indirizzo X e vai N byte". Credo che dovresti o

  1. hanno una mappatura di oggetti su pagine in modo tale da poter identificare se a scrivere su una pagina è scrivere su a particolare oggetto protetto, oppure
  2. lancia sempre il tuo malloc         alloca su confini 4k, che ti costringerebbero a usare a         dimensione minima del blocco allocato di 4k

Non so se c'è un modo migliore, ma sembra divertente giocarci. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top