4

以下のコードでは、CreateRemoteThread によって作成された LoadLibrayA からの結果を読みたいと思います。

無理そうなので助かりますが、

多分結果は読むのに間に合うように無料です、どんな提案も喜んで受け取ります

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;
4

1 に答える 1

2

あなたのスレッド手順はLoadLibrary. スレッド プロシージャの戻り値は、スレッドの終了コードです。したがって、 への呼び出しの戻り値は、 を呼び出してLoadLibrary読み取ることができますGetExitCodeThread。あなたはすでにやっています。

于 2013-06-05T20:56:21.310 に答える