1、
《Windows核心编程》中用CreateRemoteThread注入Dll,代码如下:
      // Create a remote thread that calls LoadLibraryW(DLLPathname)
      hThread = CreateRemoteThread(hProcess, NULL, 0, 
         pfnThreadRtn, pszLibFileRemote, 0, NULL);
      if (hThread == NULL) __leave;
请问,如何调用已注入的Dll中的函数???2、
用MFC编写Dll时InitInstance函数是怎么调用的?
和普通的DllMain有什么区别?

解决方案 »

  1.   

    first:
     you can call CreateRemoteThread again!
    second:
    InitInstance is the initializing function,DllMain is the function's entry, I think InitInstance is used to initialize some members!
      

  2.   

    谢谢,
    请问楼上,
    那在MFC编写Dll时DllMain 是如何实现的呢?(因为,DllMain 会有不同的调用,即在装载,卸载等情况时执行不同的代码)
      

  3.   

    还请大侠帮忙
    假设注入的Dll叫hodll.dll
    需要调用hodll.dll中的函数func(),参数为空,
    请问该如何写代码????????????
    (分不够可以加,^_^)
      

  4.   

    还有一个问题,
    注入Dll和,一般的LoadLibrary有什么不同之处?
    我LoadLibrary后可以设置键盘钩子,但是注入的Dll设置键盘钩子老是不成功,为什么啊????????
      

  5.   

    MFCDLL分两中,一种是规则dll,一种是扩展DLL,具体用那种就看你的需要了
    扩展DLL没有一个从CWinApp派生的对象;
    扩展DLL必须有一个DllMain函数;
    使用扩展DLL的MFC应用程序必须有一个从CWinApp派生的类,而且,一般在InitInstance里调用扩展DLL的初始化函数。
      

  6.   

    你从《Windows核心编程》本身就可以找到答案的。
    :)
      

  7.   

    这么说,我用的不是扩展Dll了,那么规则dll中不实现DllMain吗????????另外,
          // Get the real address of LoadLibraryW in Kernel32.dll
          PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
             GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");
          if (pfnThreadRtn == NULL) __leave;      // Create a remote thread that calls LoadLibraryW(DLLPathname)
          hThread = CreateRemoteThread(hProcess, NULL, 0, 
             pfnThreadRtn, pszLibFileRemote, 0, NULL);
          if (hThread == NULL) __leave;LoadLibraryW的返回值如何得到啊???
      

  8.   

    照taianmonkey() 的说法,有如下疑问:
    重新调用CreateRemoteThread那么函数入口如何得到???
    看了不少相关文章,估计是用GetProcAddress得到,那么,GetProcAddress中的第一个参数,模块句柄如何得到,本来我想用LoadLibrary的返回值,现在返回值也不知道去哪里取,没辙了。
      

  9.   

    如果dll只是插入本地进程,则一下代码可以设置钩子成功:
    typedef BOOL (CALLBACK *inshook)(); 
    inshook instkbhook;
    instkbhook=(inshook)GetProcAddress(GetModuleHandle(TEXT("hodll")), "installhook"); 
    instkbhook();那么,如果dll插入在远程进程中的话,那么必须设置一个函数,然后用CreateRemoteThread激活。
    那么,如何改造上边这段代码呢?
    上边哪些函数、参数需要作为插入到远程进程中的线程函数的参数呢?
    GetProcAddress?GetModuleHandle?"hodll"?"installhook"?烦请高手不吝赐教。
      

  10.   

    想在远程进程中调用dll中的函数,就在case DLL_PROCESS_ATTACH:后面加入这个函数,会在加载dll的时候自动调用,不用你去控制了
      

  11.   

    楼上可以看这篇文章,问题和我一样
    http://community.csdn.net/Expert/topic/3380/3380560.xml?temp=.1671259
    可以“在case DLL_PROCESS_ATTACH:后面加入这个函数”
    但是,设置钩子不能成功。我想问的是如何通过CreateRemoteThread创建新线程来调用已注入的dll中的函数。
      

  12.   

    “调用远程进程中Dll中的函数”这个问题难道不是个常规问题吗?
    为什么没人能解?