Delphi 我想创建一个远程线程,然后我想读取他的结果
在下面的代码中,我想从LoadLibrayA读取结果,它是由CreateRemoteThread创建的 我会感谢你的帮助, 因为这似乎是不可能的 也许结果是免费的, 任何建议都会被愉快地接受Delphi 我想创建一个远程线程,然后我想读取他的结果,delphi,Delphi,在下面的代码中,我想从LoadLibrayA读取结果,它是由CreateRemoteThread创建的 我会感谢你的帮助, 因为这似乎是不可能的 也许结果是免费的, 任何建议都会被愉快地接受 procedure InjectDLL(hProcess : Cardinal; ADllPath : String); var lSize : Cardinal; hThread : Cardinal; szLibPath : array [0..MAX_PATH] of char;
procedure InjectDLL(hProcess : Cardinal; ADllPath : String);
var
lSize : Cardinal;
hThread : Cardinal;
szLibPath : array [0..MAX_PATH] of char;
pLibRemote : Pointer;
hLibModule : DWORD ;
hKernel32 : HMODULE;
begin
hKernel32 := GetModuleHandle('Kernel32.dll');
FillMemory(@szLibPath, sizeOf(szLibPath), 0);
CopyMemory(@szLibPath, Pointer(ADllPath), length(ADllPath));
pLibRemote :=
VirtualAllocEx(
hProcess,
nil,
sizeOf(szLibPath),
MEM_COMMIT,
PAGE_READWRITE
);
try
WriteProcessMemory(
hProcess,
pLibRemote,
@szLibPath,
sizeOf(szLibPath),
lSize
);
hThread :=
CreateRemoteThread(
hProcess,
nil,
0,
GetProcAddress(hKernel32, 'LoadLibraryA'),
pLibRemote,
0,
lSize
);
try
WaitForSingleObject(hThread, INFINITE);
//------------> HERE I WANT TO READ LoadLibraryA RESULT
GetExitCodeThread(hThread, hLibModule);
finally
// Clean up
CloseHandle(hThread);
end;
finally
VirtualFreeEx(hProcess, pLibRemote, sizeof(szLibPath), MEM_RELEASE);
end;
您的线程过程是
LoadLibrary
。线程过程的返回值是线程的退出代码。因此,调用LoadLibrary
的返回值可以通过调用GetExitCodeThread
读取。您已经这样做了。您完全没有执行任何错误检查。为每个api调用添加错误检查。阅读文档了解如何做到这一点。告诉我们结果。这是失败的功能。错误是什么。还有,什么是字符?是AnsiChar
还是WideChar
?我只是不知道如何读取结果,没有错误。在“/------------->的位置,我想读取loadlibrary结果”我想读取loadlibrary的结果,结果将是基数。您没有检查错误。所以,很自然,你没有发现。请检查API调用是否有错误。你知道我说这话是什么意思吗?再说一遍,什么是字符?细节很重要。最后,您所说的“加载库的结果”是什么意思?好的,不需要检查错误,这是一个示例,我只需要一种从CreateRemoteThread读取响应内存的方法。Char是一种表示字母的变量类型,还有什么?Load library的结果是在某些情况下从CreateRemoteThread调用的函数的返回process@DavidHeffernan,您是否熟悉delphi?是的,您的意思是GetExitCodeThread是LoadLibrary加载的模块的句柄?是的,这是正确的。但除了在远程过程中,您无法对其执行任何操作。我将在明天对此进行测试,因为所有操作都已结束,但如果您确定我可以将该问题标记为已解决?通过阅读ThreadProc
文档,您可以看到我所说的是正确的: