December 14, 2005

DbgHelp weirdness

I was using one of my home made debugging tools recently and it kept crashing :( I assumed it was something I was doing but I've eventually tracked it down to where I load the symbols for the loaded modules in the target process. Attempting to load the symbols for x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\\comctl32.dll leads to dbghelp.dll generating a BEX event (which appears to be either buffer overrun or data execution prevention related).

I don't think I'm doing anything too stupid. I start the target process using the Win32 debug API, stick a breakpoint in the main thread at the thread start location, and when the breakpoint is hit I unset it and suspend the thread (I also do this with any other threads that start before the main thread hits its breakpoint). Once all threads are suspended at a safe point I inject my code and wire things up which includes taking the module snapshot and loading the symbols for the target exe and all its dlls. At this point my app sometimes tanks with the BEX.

I assume it's a race condition somehow as it seems to work OK if run under the VS debugger... It seems a little weird though. For now my hacky fix is to simply skip loading symbols for the dll in question...

More as and when I find it...


Share this entry: Email it! | bookmark it! | digg it! | reddit!

Posted by Len at December 14, 2005 09:17 PM | Comments (0) | Categories : Debugging Tools , Testing
Comments
Post a comment









Remember personal info?




Enter this code in the box below to prove that you're not some kind of automated spam robot...