Ich versuche, Speicherzugriffe auf Heap allozierten Speicher aufzuspüren.Speicherzugriffsmonitor für c-Programme
Zum Beispiel, wenn ich den folgenden Code haben:
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;
}
Ich bin in erster Linie daran interessiert, die Funktionen, die den Speicher und die Adresse des Inhalts zuzugreifen, die geändert wurden. mehrere Memory-Tools wie ptrace, verwenden Strace,
Ich habe versucht, Asan, dmalloc, aber ich habe das Ergebnis nicht erreichen.
Eine andere Idee war es, den Speicher zu ändern ändern Sie den Schutz des Speichers mit mprotect und Schreiben der Handler für Page Faults. Ich habe den Speicher schreibgeschützt, und wenn ein Schreibvorgang stattfindet, ändert der Handler den Seitenschutz und lässt die Funktion den Inhalt in den Speicher schreiben, aber danach kann ich die Seite nicht noch einmal für weitere Zugriffe lesen.
Haben Sie Tipps, wie Sie jeden auf den Heapspeicher geschriebenen Schreibvorgang überwachen können?
Mit 'gdb' können Sie einen Hardware-Haltepunkt für die Adresse festlegen. GDB nennt sie * watchpoint * s.Soweit ich weiß, haben Sie auf der x86-Plattform ein Limit von 4 Watchpoints, aber das könnte ein Implementierungsdetail gewesen sein? Ich bin mir da nicht 100% ig sicher. Siehe https://sourceware.org/gdb/onlinedocs/gdb/Set-Watchpoints.html – inetknght
Haben Sie erwogen, 'memcmp()' zu verwenden? Für die Blöcke, die Sie überwachen möchten, können Sie eine _copy_ speichern und dann regelmäßig überprüfen, ob der gewünschte Speicherpfad mit der Kopie übereinstimmt. 'memcmp (copy, location, len_location);' – ryyker
Bitte geben Sie etwas mehr Details an. Interessieren Sie sich für Laufzeitbenachrichtigungen von _within_ Ihrer Anwendung oder mithilfe eines externen Tools oder ist die in den Kommentaren erwähnte Debug-Methode ausreichend? _ [DMalloc] (http://dmalloc.com/docs/latest/online/dmalloc_7.html) _ veröffentlicht Funktionen, die perfekt Ihren Anforderungen entsprechen. Was genau hat mit DMalloc nicht funktioniert? – ryyker