DIA x64& LocalFree

时间:2013-04-19 00:35:29

标签: sdk 64-bit dia-sdk

我正在使用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)

此致 莫罗。

2 个答案:

答案 0 :(得分:0)

在做了一些逆向工程后,我发现必须通过“(LPBYTE)bstr - 4”,因为msdia ##。dll使用LocalAlloc进行分配,并在将数据返回给用户之前将指针递增4。

我认为这种行为是模拟BSTR,它在指针指向的地址之前将字符串的长度存储在DWORD中。我使用x64版本发现了这个问题。在x86中虽然它有同样的问题,但应用程序不会崩溃但会产生泄漏。

问候。

答案 1 :(得分:0)

使用指针时要小心。 LocalAlloc将指针增加4个字节。 BSTR大小是单词,所以你只能做#34; LocalFree(bstr - 2)"。