Exe程序A 的尾部追加了Exe程序B. 如何在A运行完后自动转道B的进入点开始运行? (已知A知道B在A的开始位置). TIA

解决方案 »

  1.   

    我不知道你的追加是什么意思,是用的资源形式,还是直接加起来的?
    如果是1种,方法就是把他释放出来,然后用 CreateProcess, 
    如果是2种,我也没有好办法其实我在想,你可以分析一下pe的格式,新见一个节,把那些代码放到里面去。
      

  2.   

    不是资源, 而是加在EXE文件尾. 我是想,既然A进程已经加到内存了, 在把B释放到硬盘,在Create B的进程运行之是否太麻烦了, 经过慢速的硬盘读写过程. 刚才在EE看到几个俄国人讨论相关话题,最后也是写成新文件在运行:
    http://www.experts-exchange.com/jsp/qShow.jsp?qid=20085459
      

  3.   

    启动和等待进程结束 
    --------------------------------------------------------------------------------我们在开发是经常需要在启动一个进程之后等待其结束后再继续运行。在这里提供了一个名为Wait的函数,它会为你完成上面的功能。实现的思想
    是在启动进程后等待其结束,由于进程是一种资源,而资源的句柄在WIN32中
    可以作为核心量使用。你可以使用WaitForSingleObject等待核心量状态改变
    为有信号状态。对进程来讲当进程结束时其状态转变为有信号。在本例中使用了一个单独的线程来启动进程并等待结束。Wait()
    BOOL Wait(CString szCmdLine)
    {
    LPTHREADINFO pThreadInfo = new THREADINFO;
    CEvent *pThreadEvent = new CEvent(FALSE, TRUE);
    ASSERT_VALID(pThreadEvent);
    if(pThreadInfo)
    {
    pThreadInfo->pTermThreadEvent = pThreadEvent;
    pThreadInfo->strPathName = szCmdLine;AfxBeginThread(LaunchAndWait, pThreadInfo);
    WaitForSingleObject(pThreadEvent->m_hObject, INFINITE);
    return TRUE;
    }
    return FALSE;
    }LaunchAndWait()
    UINT LaunchAndWait(LPVOID pParam)
    {
    LPTHREADINFO pThreadInfo = (LPTHREADINFO) pParam;
    PROCESS_INFORMATION stProcessInfo;
    if(LaunchApplication(pThreadInfo->strPathName, &stProcessInfo))
    {
    HANDLE hThreads[2];
    hThreads[0] = pThreadInfo->pTermThreadEvent->m_hObject;
    hThreads[1] = stProcessInfo.hProcess;
    DWORD dwIndex = WaitForMultipleObjects(2, hThreads, FALSE, INFINITE);
    CloseHandle(stProcessInfo.hThread);
    CloseHandle(stProcessInfo.hProcess);
    pThreadInfo->pTermThreadEvent->SetEvent();
    if(pThreadInfo)
    delete pThreadInfo;
    }
    else
    pThreadInfo->pTermThreadEvent->SetEvent();
    return 0;
    }
    LaunchApplication()
    BOOL LaunchApplication(LPCTSTR pCmdLine, PROCESS_INFORMATION *pProcessInfo)
    {
    STARTUPINFO stStartUpInfo;memset(&stStartUpInfo, 0, sizeof(STARTUPINFO));stStartUpInfo.cb = sizeof(STARTUPINFO);stStartUpInfo.dwFlags = STARTF_USESHOWWINDOW;
    stStartUpInfo.wShowWindow = SW_SHOWDEFAULT;return CreateProcess(NULL, (LPTSTR)pCmdLine, NULL, NULL, FALSE,
    NORMAL_PRIORITY_CLASS, NULL,
    NULL, &stStartUpInfo, pProcessInfo);
    }
      

  4.   

    释放出来再用SHELLEXECUTE运行吧。
    不然就是得要十分了解PE文件格式了,还要懂一点汇编,
    其实实现了这样,你就可以制造病毒了。