我这是由我在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选项总是首选。 –