我正在使用DIA Sdk从PDB文件中提取一些信息。我创建了一个非com的DiaSourceAlt对象,所以我必须使用LocalFree来释放字符串。
下面的代码在x86中运行良好,但在x64上,LocalFree调用会破坏堆。
IDiaSymbol *lpSymbol;
BSTR bStrName;
...
hRes = lpSymbol->get_undecoratedNameEx(0x87FE, &bStrName);
if (SUCCEDED(hRes))
LocalFree(bStrName);有什么建议吗?(我使用的是msdia90.dll)
你好,毛罗。
发布于 2013-04-20 20:47:47
在做了一些反向工程后,我发现必须传递"(LPBYTE)bstr - 4“,因为msdia##.dll使用LocalAlloc进行分配,并在将数据返回给用户之前将指针递增4。
我认为这个行为是为了模仿BSTR,它将字符串的长度存储在DWORD中,恰好在指针所指向的地址之前。我使用x64版本发现了这个问题。在x86中,虽然它有同样的问题,但应用程序不会崩溃,但会产生泄漏。
致以问候。
发布于 2016-04-25 23:31:57
在使用指针时一定要小心。LocalAlloc将指针递增4个字节。BSTR大小是word,因此您只能执行"LocalFree(bstr - 2)“。
https://stackoverflow.com/questions/16095367
复制相似问题