我有一个旧的注入器,是在Delphi 7中制作的。我试图修改它,使其仍然可以在XE2中使用,但是我失败了。新的测试dll可以与我的旧注入器无任何问题地配合使用,因此我相当确定我的注入器存在错误。
以下是我制作的代码:
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,bw更改为NativeUInt即可。showmessage仅告诉我所有的东西都起作用了。由于String类型从d7更改为XE2,必定存在一些微小的差异。我还尝试将dll名称强制转换为PAnsiChar,但对我没有任何影响。希望我提供了足够的信息给你。