如何根据函数的参数打破Win32 API函数?

Edd*_*eyo 5 debugging winapi visual-studio-2010

我正在使用VS2010调试混合的.Net /本机应用程序,我正在尝试确定是否/何时释放特定的BSTR.基于这个问题:Win32 Api函数的调试中断我已经弄清楚如何在SysFreeString中设置断点,但它被称为A LOT.我想设置一个条件让它只在我感兴趣的特定字符串被释放时中断.

看起来字符串的地址被压入堆栈,但我无法弄清楚如何取消引用堆栈寄存器以确定它是否是我的字符串.我尝试[esp] == 0x001ADCAC在断点条件下放置类似(其中0x001ADCAC是我感兴趣的字符串的地址),但这不起作用.

Edd*_*eyo 4

弄清楚了!我将以下内容放入断点的条件中:

DW esp+4 == 0x001ADCAC
Run Code Online (Sandbox Code Playgroud)

它起作用了。DW 相当于调试器中的“dword ptr”。此处列出了所有“汇编语言表达式”:http://msdn.microsoft.com/en-us/library/56638b75.aspx

这也可以工作:

*(unsigned long*)(esp+4) == 0x001ADCAC
Run Code Online (Sandbox Code Playgroud)