Как сломать функцию Win32 API на основе параметров функции? - PullRequest
5 голосов
/ 09 июня 2011

Я отлаживаю смешанное приложение .Net / native с VS2010 и пытаюсь определить, освободится ли конкретный BSTR.Основываясь на этом вопросе: Отладочный перерыв в функциях Win32 Api Я выяснил, как установить точку останова в SysFreeString, но она называется LOT.Я хотел бы установить условие, чтобы оно прерывалось только тогда, когда освобождается интересующая меня строка.

Похоже, что адрес строки помещается в стек, но я не могувыяснить, как разыменовать регистры стека, чтобы выяснить, является ли это моей строкой или нет.Я попытался поместить что-то вроде [esp] == 0x001ADCAC (где 0x001ADCAC - адрес интересующей меня строки) в условие точки останова, но это не сработало.

1 Ответ

4 голосов
/ 09 июня 2011

Разобрался!Я поставил следующее условие для точки останова:

DW esp+4 == 0x001ADCAC

, и это сработало.DW является эквивалентом отладчика "dword ptr".Все «выражения языка ассемблера» перечислены здесь: http://msdn.microsoft.com/en-us/library/56638b75.aspx

Это также сработало бы:

*(unsigned long*)(esp+4) == 0x001ADCAC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...