Есть ли способ обнаружить/инициировать скрещивание записи в строку без использования mprotect (что я не могу использовать)?Определить запись в строку
В настоящее время я могу обнаружить запись только в следующем чтении, но это слишком поздно (следующее чтение может исходить из совершенно другой библиотеки).
Примечание. Использование gdb с точками наблюдения завершилось неудачей из-за того, что оптимизатор перемещает строку в памяти процесса.
Редактировать: переменная, о которой идет речь, является членом класса (char *), который содержит некоторые метаданные в качестве префикса для строки. Строка - это часть, которая должна быть неизменной, а префикс должен быть доступен для записи. У меня есть несколько миллионов этих объектов в статическом статическом хеше, и к ним обращаются практически из любого места в нашем коде.
Как насчет использования точек наблюдения gdb по неоптимизированному коду? –
Поскольку я не могу воспроизвести ошибку на другом компьютере и заменить все файлы libs \ execs на unoptimized, потребуется переустановка ОС (это очень низкоуровневый код). – Neowizard
Не 'watch myString' не зависит от того, где Оптимизатор разместил вашу строку 'myString'? Разве это не головная боль отладчика, чтобы выяснить, где в памяти «myString»? –