Я отлаживаю стороннюю DLL, для которой у меня нет исходного кода. Эта DLL поддерживает пул строк. Я хочу уловить самый ранний случай, когда одна из этих строк передается в функцию ... любую функцию вообще ...
Другими словами, я хочу обнаружить, когда указатель на строку с нулевым завершением, имеющую определенный формат, помещается в стек ... кем-либо, и я хочу выполнить Debug Break, когда это происходит.
Я знаю, что вы можете установить точку останова «прерывание при доступе», которая срабатывает, когда ЦП считывает / записывает / выполняет определенный адрес. То, что я хочу, похоже на это: для каждой строки, помещенной в стек, я хочу протестировать ее на соответствие определенному формату, и, если она совпадает, выполнить разрыв.
Использование WinDbg, OllyDb, VS2008, что угодно .. Есть идеи?
Спасибо!





Я бы сказал, что это невозможно с вашими требованиями:
I want to detect when a pointer-to-a-null-terminated-string having a certain format
Как сказано в предыдущем ответе, вы сможете сопоставить свою строку с чем угодно, как только ваш хиты точек останова
I want to trap the earliest occurrence at which one of these strings is passed into a function...any function at all... What I want is similar to this: for each string pushed onto the stack, I want to test it against a certain format, and if it matches, execute the break.
Итак, вам нужно обнаруживать, когда какая-либо функция вызывается с определенным параметром указателя в стеке - это «невозможная» часть. Теоретически есть несколько способов сделать это, но они должны быть медленными и сложными ... А что, если функция получит указатель на указатель, который имеет значение, которое вы отслеживаете, или массив, содержащий этот указатель ...
Чего вы пытаетесь достичь? Зачем вам нужно место, где строка сначала передается в функцию? Использование строки - это то, что наиболее часто важно, и, как вы знаете, вы можете сломать это с помощью простой точки останова доступа к памяти (если строка когда-либо копируется, добавьте еще одну точку останова).
Я бы порекомендовал вам использовать другой подход, использовать дизассемблер и провести еще немного статического анализа с небольшой отладкой, чтобы добраться до того, что вам нужно ...
Ознакомьтесь со статьей <a href = "blog.lordjeb.com/…</a> о WinDBG.