我正在使用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)
此致 莫罗。
答案 0 :(得分:0)
在做了一些逆向工程后,我发现必须通过“(LPBYTE)bstr - 4”,因为msdia ##。dll使用LocalAlloc进行分配,并在将数据返回给用户之前将指针递增4。
我认为这种行为是模拟BSTR,它在指针指向的地址之前将字符串的长度存储在DWORD中。我使用x64版本发现了这个问题。在x86中虽然它有同样的问题,但应用程序不会崩溃但会产生泄漏。
问候。
答案 1 :(得分:0)
使用指针时要小心。 LocalAlloc将指针增加4个字节。 BSTR大小是单词,所以你只能做#34; LocalFree(bstr - 2)"。