可能描述的不是很清楚:
比如:
现在有a.exe和b.dll
a.exe只是个加载程序,全部的处理由dll完成。(点击exe,加载dll文件,exe退出由dll开始接手,a只需要在电脑上运行一次任务就完成了)我现在发布的时候只想发布一个a.exe文件 。怎么实现

解决方案 »

  1.   

    EXE退出DLL继续工作?=。=
    学习。
      

  2.   

    这个里面有个概念的问题。dll是加载的空间问题。dll的进程空间就是那个exe的进程空间。你要 a.exe 加载 b.dll后,a.exe退出而运行b.dll,那么b.dll的进程空间在哪儿呢??
      

  3.   

    DLL文件必须有宿主程序才可以执行,按楼主说的,DLL文件的宿主是a.exe如果宿主程序退出,DLL文件也会退出,所以我觉得如果在进程管理器中找不到A.EXE的进程,只要A.EXE生成DLL后,(此时不退出)插入线程,用系统进程如:EXPLORER.EXE,来调用生成的DLL文件,然后A.EXE退出!这样,在进程管理器中就看不到A.EXE进程了,但如果EXPLORER被中止的话,DLL文件也会被中止,因为EXPLORER是DLL的宿主!这样就形成了木马的功能了!呵呵,我也是书上看到的,没有实践过...!其中的操作是很复杂的,什么打开令牌环,什么...我是初学者,一点都看不懂...见谅!
      

  4.   

    整理下思路:
    b.dll里面就一个call()函数 ,然后a.exe就调用这个call()函数之后把dll注射到系统进程里面.
    (比如explorer.exe) , 接着a.exeexe程序就自己退出了,因为它的工作已经完成(它就是个loader)剩下的就是b.dll这个call()函数在系统里面工作了 ..
    我现在想问问就是 怎么把 a.exe和b.dll合并成一个exe文件.(使发布的时候只需要一个exe文件就可以了)又或者是在现有a.exe里面怎么动态的生成b.dll程序.
      

  5.   

    //---------------test Dynamic load the dll file -------------------
    HINSTANCE hinstLib;
        hinstLib = LoadLibrary("C:\\testprog\\test.dll"); 
        if(!hinstLib)
       {
            AfxMessageBox("err");
    return FALSE;
        }
     
        typedef int ( *max11)(int i1,int i2,int i3);
        max11 myMax;
         myMax = (max11)GetProcAddress(hinstLib,"fun"); 
        int iret = myMax(1,2,3);