Sto cercando di rintracciare gli accessi alla memoria per allocare memoria allocata.Monitor di accesso alla memoria per programmi c
Per esempio, se ho il seguente codice:
void set_value(int* buffer, size_t pos, int value) {
buffer[pos] = value;
}
int main(void) {
int* buffer = malloc(BUFF_SIZE * sizeof(int));
set_value(buffer, 2, 10);
set_value(buffer, 3, 12);
free(buffer);
return 0;
}
Sono principalmente interessato alle funzioni che accedono alla memoria e l'indirizzo del contenuto che sono stati modificati.
ho cercato di utilizzare più strumenti di memoria come ptrace, strace, Asan, dmalloc, ma non ho ottenere il risultato.
Un'altra idea era quella di modificare la memoria cambiare la protezione della memoria usando mprotect e scrivere i gestori per gli errori di pagina. Ho fatto in modo che la memoria fosse di sola lettura e quando si verifica una scrittura, il gestore modifica la protezione della pagina e lascia che la funzione scriva il contenuto in memoria, ma dopo non riesco a leggere di nuovo la pagina, per ulteriori accessi.
Avete suggerimenti su come monitorare ogni scrittura effettuata nella memoria heap?
Utilizzando 'gdb', è possibile impostare un punto di interruzione hardware sull'indirizzo. GDB li chiama * watchpoint * s.Per quanto ne so, sulla piattaforma x86, hai un limite di 4 watchpoint, ma questo potrebbe essere stato un dettaglio di implementazione? Non sono sicuro al 100% su quello. Vedi https://sourceware.org/gdb/onlinedocs/gdb/Set-Watchpoints.html – inetknght
Hai considerato l'utilizzo di 'memcmp()'? Per i blocchi che si desidera monitorare, è possibile mantenere un _copy_, quindi verificare periodicamente che la posizione mem di interesse corrisponda ancora alla sua copia. 'memcmp (copia, posizione, posizione_lena);' – ryyker
Fornire ulteriori dettagli. Ti interessano le notifiche di runtime da _within_ la tua applicazione, o usando uno strumento esterno, o il metodo di debug menzionato nei commenti è sufficiente? _ [DMalloc] (http://dmalloc.com/docs/latest/online/dmalloc_7.html) _ pubblica funzionalità che sembrano corrispondere perfettamente a ciò che hai descritto come requisiti. Quindi cosa non ha funzionato esattamente con DMalloc? – ryyker