2011-06-08 15 views
5

Estoy depurando una aplicación mixta .Net/nativa con VS2010, y estoy tratando de determinar si/cuando un BSTR particular se libera. Basado en esta pregunta: Debug Break on Win32 Api functions He descubierto cómo establecer un punto de interrupción en SysFreeString, pero se llama MUCHO. Me gustaría establecer una condición para que solo se rompa cuando se libere la cadena en particular que me interesa.¿Cómo se divide una función de la API de Win32 en función de los parámetros de la función?

Parece que la dirección de la cadena se inserta en la pila, pero no sé cómo desreferenciar los registros de la pila para averiguar si se trata de mi cadena o no. Intenté poner algo como [esp] == 0x001ADCAC (donde 0x001ADCAC es la dirección de la cadena que me interesa) en la condición de punto de interrupción, pero eso no funcionó.

Respuesta

4

¡Lo descubrí! Puse lo siguiente en la condición para el punto crítico:

DW esp+4 == 0x001ADCAC 

y funcionó. DW es el equivalente del depurador a "dword ptr". Todas las "expresiones del lenguaje de montaje" se enumeran aquí: http://msdn.microsoft.com/en-us/library/56638b75.aspx

Esto hubiera funcionado así:

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