Я пытаюсь отследить доступ к памяти для выделенной памяти.Монитор доступа к памяти для программ c
Например, если у меня есть следующий код:
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, Трассирование, Асан, пооддержки, но я не достиг результата.
Еще одна идея состояла в том, чтобы изменить изменение памяти на память с помощью mprotect и написать обработчики для Page Faults. Я сделал память только для чтения, и когда происходит запись, обработчик изменяет защиту страницы и позволяет функции записывать содержимое в память, но после этого я не могу сделать страницу только для чтения, для дальнейшего доступа.
У вас есть какие-либо советы о том, как отслеживать каждую запись, сделанную в память кучи?
Используя 'gdb', вы можете установить аппаратную точку останова по адресу. GDB называет их * watchpoint * s.Насколько мне известно, на платформе x86 у вас есть ограничение на 4 точки наблюдения, но это может быть деталь реализации? Я не уверен на это на 100%. См. Https://sourceware.org/gdb/onlinedocs/gdb/Set-Watchpoints.html – inetknght
Считаете ли вы использование 'memcmp()'? Для блоков, которые вы хотите отслеживать, вы можете сохранить _copy_, а затем периодически проверять, что интересующая ячейка по-прежнему совпадает с ее копией. 'memcmp (копия, местоположение, len_location);' – ryyker
Пожалуйста, предоставьте немного более подробную информацию. Вас интересуют уведомления во время выполнения от _within_ вашего приложения или с помощью внешнего инструмента или достаточно ли метод отладки, упомянутый в комментариях? _ [DMalloc] (http://dmalloc.com/docs/latest/online/dmalloc_7.html) _ публикует возможности, которые, как представляется, идеально соответствуют тому, что вы описали как ваши требования. Так что же конкретно не с DMalloc? – ryyker