0

当我调用这个 CallExport 函数时,GetProcAdress(module, "Main") 返回 0,我不知道为什么。之前的 LoadLibraryEx 工作并返回一个有效的 IntPtr。

public class ProcessInteraction {

   public static bool CallExport(Process process, string dll, string function)
     {
          IntPtr module = LoadLibraryEx(dll, IntPtr.Zero, 1);
          if (module == IntPtr.Zero) return false;

          IntPtr functionAddress = GetProcAddress(module, function);
          if (functionAddress == IntPtr.Zero) return false;
          functionAddress = GetModule(process, dll).BaseAddress + (int)functionAddress - (int)module;

          IntPtr thread = CreateRemoteThread(process.Handle, IntPtr.Zero, IntPtr.Zero, functionAddress, IntPtr.Zero, 0, IntPtr.Zero);
          if (thread == IntPtr.Zero) return false;

          WaitForSingleObject(thread, 0xFFFFFFFF);
          CloseHandle(thread);

          return true;
      }

 }

在我的 Dll 代码中,我有:

internal class EntryPoint {
     [DllExport("Main")]
     internal static void Main() {
           // some code ...
     }
 }

似乎 GetProcAdress(module, "Main") 在我的 dll 中找不到“Main”函数,即使有一个。

4

0 回答 0