2013-04-19 34 views
0

我正在使用DIA Sdk從PDB文件中提取一些信息。我創建了非com的DiaSourceAlt對象,所以我必須使用LocalFree釋放字符串。DIA x64&LocalFree

以下代碼片段在x86中正常工作,但在x64上,LocalFree調用會損壞堆。

IDiaSymbol *lpSymbol; 
BSTR bStrName; 

... 
hRes = lpSymbol->get_undecoratedNameEx(0x87FE, &bStrName); 
if (SUCCEDED(hRes)) 
    LocalFree(bStrName); 

有什麼建議嗎? (我正在使用msdia90.dll)

Regards, Mauro。

回答

0

在做了一些逆向工程之後,我發現必須傳遞「(LPBYTE)bstr-4」,因爲msdia ##。dll使用LocalAlloc進行分配,並在將數據返回給用戶之前將指針遞增4。

我認爲這種行爲是模擬BSTR,它將字符串的長度存儲在指針指向的地址之前的DWORD中。我使用x64版本發現了這個問題。在x86中,雖然它有相同的問題,但應用程序不會崩潰,但會產生泄漏。

問候。

0

使用指針時一定要小心。 LocalAlloc將指針增加4個字節。 BSTR大小是字,所以你只能做「LocalFree(bstr - 2)」。