procedure Test(); Stdcall;
begin
  asm
    pushad
    call address
    popad
  end;
end;这个Test函数是DLL里的,由本程序Project1使用StartHook把DLL注入目标程序。注入之后,我想让目标程序执行DLL里的Test函数,该怎么做啊?
DLL是没有Form的

解决方案 »

  1.   

    这个看你的HOOK是什么样的HOOK了,在HOOK的回调函数里调用Test(),当你的回调函数被执行时就会执行这段代码了,比如鼠标钩子,当鼠标事件发生时就会执行你的回调函数.在调用之前应当先检查一下当前进程是不是你希望的进程,比如你想让这段代码在explorer.exe里执行,那就检查当前进程是不是explorer.exe
      

  2.   

    重写DLL入口函数
    procedure EntryPointProc(Reason: DWORD);
    begin
      case Reason of
        //DLL被映射
        DLL_PROCESS_ATTACH:
        begin
          //你的代码
        end;
        //DLL线程启动
        DLL_THREAD_ATTACH:;
        //DLL线程销毁
        DLL_THREAD_DETACH:;
        //DLL被卸载
        DLL_PROCESS_DETACH:;
      end;
    end;
        
    begin
      DllProc := @EntryPointProc;
      EntryPointProc(DLL_PROCESS_ATTACH);
    end.
      

  3.   

    我现在就是用消息做的,不过使用消息的话必须要给DLL创建一个Form
    参数也只能有2个,还只能是数字,不能传递字符串。如果参数是结构类型的,就没法用了