-1
我正在向非託管進程注入非託管DLL。這裏的目標是使用這個引導程序來初始化CLR,這樣我就可以在目標進程中使用.NET框架。注入工作正常,但試圖啓動CLR並加載託管庫會導致我遇到問題。這裏是我的代碼,我試圖啓動與CLR(右來自調用DllMain):)ICLRRuntimeHost啓動方法永不返回
void Init() {
ICLRRuntimeHost *pClrHost = NULL;
HRESULT hr = CorBindToRuntimeEx(NULL, L"wks", 0, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (PVOID*)&pClrHost);
MessageBox(NULL, L"attempt start", L"Dll", MB_OK);
hr = pClrHost->Start();
MessageBox(NULL, L"past start", L"Dll", MB_OK);
DWORD dwRet = 0;
hr = pClrHost->ExecuteInDefaultAppDomain(L"C:\\Users\\Blank\\Documents\\ManagedLibrary.dll", L"Namespace.Class", L"Main", L"Parameters", &dwRet);
}
我的第一個消息框彈出罰款,但調用Start(似乎要禁止,再也不回來。這會導致目標進程無響應。註釋掉Start()並嘗試立即執行具有相同的結果。
然後,如果我不能在DLLMain中執行,我該如何開始CLR呢?我正在注入一個完全獨立的進程,所以我不能使用PInvoke來調用其他一些方法。 – AnthonyOSX
我相信還有其他與SO有關的問題。我在這裏不是專家,但你可以嘗試注入一個遠程線程('CreateRemoteThread')並從那裏啓動它。 –