我這是由我在Delphi 7條提出的舊注射器和我試圖改變他如此,它仍然工作在XE2但我失敗的-.-新的測試DLL與我的舊注射器工作沒有任何問題,所以我很確定我的注射器有一個錯誤。翻譯代碼DLL注入德爾福7德爾福XE2
這裏是我做的代碼:
procedure TForm1.InjectDLL(const ADLLName: String; targetproc: Cardinal);
var
dllname: String;
pDLLname, pStartAddr: Pointer;
bw: NativeUInt;
hProcess, hRemoteThread: THandle;
TID: Cardinal;
begin
hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, targetproc);
pDLLname := VirtualAllocEx(hProcess, 0, length(dllname) + 1,
MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hProcess, pDLLname, Pointer(dllname),
length(dllname) + 1, bw);
pStartAddr := GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA');
hRemoteThread := CreateRemoteThread(hProcess, nil, 0, pStartAddr,
pDLLname, 0, TID);
WaitForSingleObject(hRemoteThread, INFINITE);
showmessage('Fehler ' + IntToStr(GetLastError) + ': ' +
SysErrorMessage(GetLastError));
CloseHandle(hProcess);
end;
我只是需要hProcess和hRemoteThread改變THandle和重量至NativeUInt。 showmessage只是告訴我,所有的作品。由於字符串類型從d7更改爲XE2,所以必須有一個小的差異。我也嘗試將dll的名字命名爲PAnsiChar,但它對我沒有任何改變。
希望我爲您發佈了足夠的信息。
我使用版本2得到這個工作即時通訊使用XE2無論如何(德爾福7被卸載)。非常感謝:D。 – HolyShiru
選項1可以在XE2上正常工作,但Unicode選項總是首選。 –