對不起我最後得到的答案貼半生不熟,我按下選項卡,無需記住這是一個文本框,而不是一個編輯器中輸入...
反正繼承人它在全:
您可以使用少走彎路庫掛鉤的分配和釋放功能,用自己替換它們:
依稀是這樣的:
//declare a global
HANDLE g_currentHeap;
LPVOID WINAPI HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes)
{
return OriginalHeapAlloc(g_currentHeap, dwFlags, dwBytes);
}
BOOL WINAPI HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)
{
return OriginalHeapFree(g_currentHeap, dwFlags, lpMem);
}
在應用負載
HANDLE g_Heaps[2];
int main()
{
// Two heaps
g_Heaps[0] = HeapCreate(...);
g_Heaps[1] = HeapCreate(...);
// Do whatevers needed to hook HeapAlloc and HeapFree and any other heap functions
// and redirect them to the versions above
// Save the old function pointers so we can call them
}
然後每次你打電話從第三方DLL的API,你可以做到這一點
void someFn()
{
g_currentHeap = g_Heaps[1];
Some3rdPartyAPI();
g_currentHeap = g_Heaps[0];
SomeOtherFunction();
}
這應該解決您的問題
@peterchen:C++運行時調用HeapAlloc對於新的和malloc(),所以這種方法將工作。事實上,我相信幾乎所有的語言運行時都會使用win32 Heap函數,除非有一個特殊的原因。
你如何鏈接到圖書館? – GManNickG 2010-03-15 07:23:09
@GMan:程序以圖形方式鏈接到圖書館。 – sharptooth 2010-03-15 07:33:42
DLL如何鏈接到運行時? – 2010-03-15 11:35:51