Я пытаюсь отслеживать доступ к памяти в кучу выделенной памяти.
Например, если у меня есть следующий код:
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;
}
Меня в основном интересуют функции, которые обращаются к памяти и адресу измененного содержимого.
Я попытался использовать несколько инструментов памяти, например ptrace, strace, ASan, Dmalloc, но я не достигли результата.
Другая идея заключалась в том, чтобы изменить изменение памяти на память с помощью mprotect и написать обработчики для Page Faults. Я сделал память только для чтения, и когда происходит запись, обработчик изменяет защиту страницы и позволяет функции записывать содержимое в память, но после этого я не могу сделать страницу только для чтения, для дальнейшего доступа.
Есть ли у вас какие-либо советы о том, как отслеживать каждую запись в память кучи?