х86:Можно ли прервать отладку, когда определенный указатель на строку помещается в стек?
-
22-08-2019 - |
Вопрос
Я отлаживаю стороннюю DLL, исходного кода которой у меня нет.Эта DLL поддерживает пул строк.Я хочу перехватить самое раннее появление, когда одна из этих строк передается в функцию... любую функцию вообще...
Другими словами, я хочу обнаружить, когда указатель на строку с нулевым завершением, имеющую определенный формат, помещается в стек... кем-либо, и я хочу выполнить Debug Break, когда это произойдет.
Я знаю, что вы можете установить точку останова «прерывания при доступе», которая сработает, когда ЦП читает/пишет/выполняет определенный адрес.То, что я хочу, похоже на это:для каждой строки, помещенной в стек, я хочу проверить ее на соответствие определенному формату и, если она соответствует, выполнить разрыв.
Использование WinDbg, OllyDb, VS2008, что угодно… есть идеи?
Спасибо!
Решение
Я бы сказал, что это невозможно с вашими требованиями:
Я хочу определить, когда указатель на строку с нулевым завершением имеет определенный формат
Как говорилось в предыдущем ответе, вы сможете сопоставить свою строку с чем угодно, как только вы попадания в точки останова
Я хочу перехватить самое раннее появление, когда одна из этих строк передается в функцию... любую функцию вообще...То, что я хочу, похоже на это:для каждой строки, помещенной в стек, я хочу проверить ее на соответствие определенному формату и, если она соответствует, выполнить разрыв.
Итак, вам нужно определить, когда какая-либо функция вызывается с определенным параметром указателя в стеке - это «невозможная» часть.Теоретически есть несколько способов сделать это, но они медленные и сложные...А что, если функция получит указатель на указатель, имеющий отслеживаемое значение, или массив, содержащий этот указатель...
Чего вы пытаетесь достичь?Зачем вам нужно место, где строка сначала передается в функцию?Чаще всего важно использовать строку, и, как вы знаете, вы можете прервать это с помощью простой точки останова доступа к памяти (если строка когда-либо копируется, добавьте еще одну точку останова).
Я бы порекомендовал вам использовать другой подход, использовать дизассемблер и провести еще немного статического анализа с небольшой отладкой, чтобы получить то, что вам нужно...