X86: возможно ли отладить прерывание, когда в стек помещается конкретный указатель на строку?

Я отлаживаю стороннюю DLL, для которой у меня нет исходного кода. Эта DLL поддерживает пул строк. Я хочу уловить самый ранний случай, когда одна из этих строк передается в функцию ... любую функцию вообще ...

Другими словами, я хочу обнаружить, когда указатель на строку с нулевым завершением, имеющую определенный формат, помещается в стек ... кем-либо, и я хочу выполнить Debug Break, когда это происходит.

Я знаю, что вы можете установить точку останова «прерывание при доступе», которая срабатывает, когда ЦП считывает / записывает / выполняет определенный адрес. То, что я хочу, похоже на это: для каждой строки, помещенной в стек, я хочу протестировать ее на соответствие определенному формату, и, если она совпадает, выполнить разрыв.

Использование WinDbg, OllyDb, VS2008, что угодно .. Есть идеи?

Спасибо!

Ознакомьтесь со статьей <a href = "blog.lordjeb.com/…</a> о WinDBG.

Cory Foy 19.12.2008 15:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
515
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы сказал, что это невозможно с вашими требованиями:

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.

Итак, вам нужно обнаруживать, когда какая-либо функция вызывается с определенным параметром указателя в стеке - это «невозможная» часть. Теоретически есть несколько способов сделать это, но они должны быть медленными и сложными ... А что, если функция получит указатель на указатель, который имеет значение, которое вы отслеживаете, или массив, содержащий этот указатель ...

Чего вы пытаетесь достичь? Зачем вам нужно место, где строка сначала передается в функцию? Использование строки - это то, что наиболее часто важно, и, как вы знаете, вы можете сломать это с помощью простой точки останова доступа к памяти (если строка когда-либо копируется, добавьте еще одну точку останова).

Я бы порекомендовал вам использовать другой подход, использовать дизассемблер и провести еще немного статического анализа с небольшой отладкой, чтобы добраться до того, что вам нужно ...

Другие вопросы по теме