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

时间:2011-06-08 20:26:40

标签: visual-studio-2010 winapi debugging

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

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

1 个答案:

答案 0 :(得分:4)

想出来!我将以下内容置于断点的条件中:

DW esp+4 == 0x001ADCAC

它有效。 DW是调试器,相当于“dword ptr”。这里列出了所有“汇编语言表达式”:http://msdn.microsoft.com/en-us/library/56638b75.aspx

这也会有效:

*(unsigned long*)(esp+4) == 0x001ADCAC