Delphi 我想创建一个远程线程,然后我想读取他的结果

Delphi 我想创建一个远程线程,然后我想读取他的结果,delphi,Delphi,在下面的代码中,我想从LoadLibrayA读取结果,它是由CreateRemoteThread创建的 我会感谢你的帮助, 因为这似乎是不可能的 也许结果是免费的, 任何建议都会被愉快地接受 procedure InjectDLL(hProcess : Cardinal; ADllPath : String); var lSize : Cardinal; hThread : Cardinal; szLibPath : array [0..MAX_PATH] of char;

在下面的代码中,我想从LoadLibrayA读取结果,它是由CreateRemoteThread创建的

我会感谢你的帮助, 因为这似乎是不可能的

也许结果是免费的, 任何建议都会被愉快地接受

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
文档,您可以看到我所说的是正确的: