[英]Creating a process in memory C++
我已經在這個代碼上工作了幾個小時,這讓我發瘋了!
整個資源在這里http://pastebin.com/Urxh68W4,但是我很確定我知道這個問題。
extern "C" NTSYSAPI LONG NTAPI ZwUnmapViewOfSection(HANDLE, PVOID);
當我運行它時,出現以下錯誤:
Error 1 error LNK2019: unresolved external symbol __imp__ZwUnmapViewOfSection@8 referenced in function _wWinMain@16
我猜測應該包含一些dll或庫,因此我將Ntoskrnl.lib添加到了我的項目中,因為它包含ZwUnmapViewOfSection函數。
我完全不知道該怎么辦。 我應該使用Ntdll.dll嗎? 如果是這樣,我怎么還要鏈接一個dll? 我以為您只能使用Visual Studio 2010中的庫。
另外,NTSYSAPI和NTAPI到底是什么? 網上幾乎沒有任何信息。
這看起來像用戶模式代碼,因此您可能不想鏈接到ntoskrnl.lib。 您寧願鏈接到ntdll。
我可能會做到這一點的方法是使用動態鏈接和調用GetProcAddress
傳遞一個HANDLE
到ntdll.dll中和ZwUnmapViewOfSection
。
示例代碼:
typedef LONG (NTAPI *pfnZwUnmapViewOfSection)(HANDLE, PVOID);
HMODULE hMod = GetModuleHandle("ntdll.dll");
pfnZwUnmapViewOfSection pZwUnmapViewOfSection= (pfnZwUnmapViewOfSection)GetProcAddress(hMod, "ZwUnmapViewOfSection");
我還沒有編譯它,但是它看起來應該像這樣(也許添加一些錯誤檢查等)。
關於您的其他問題: NTAPI
是定義調用約定的宏,在本例中為__stdcall
。 調用約定與如何傳遞函數的參數以及誰將清除這些參數有關。
例如, __stdcall
要求以相反的順序將參數推入堆棧,而被調用方將清理堆棧。
同樣, NTSYSAPI
是一個宏,如果我正確調用的話,它只能解析為__declspec(dllimport)
。
另外,我應該指出,通常不贊成在用戶模式下由NtDll導出的調用函數。 而且,您正在編寫的代碼在使用過程中也會遇到其他問題(即使看起來很正常)。
如果您正在尋找另一個代碼示例,該示例執行與您正在編寫的代碼非常相似的任務,則可以在此處查看 。 這是Duqu惡意軟件使用的一種技術。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.