예제 #1
0
/// <summary>
/// Unmap all manually mapped modules
/// </summary>
/// <returns>true on success</returns>
bool MMap::UnmapAllModules()
{
    for (auto iter = _images.rbegin(); iter != _images.rend(); iter++)
    {
        ImageContext *pImage = iter->get();

        // Call main
        RunModuleInitializers( pImage, DLL_PROCESS_DETACH );

        // Remove VEH
        if (!(pImage->flags & NoExceptions))
            DisableExceptions( pImage );

        // Free memory
        pImage->imgMem.Free();

        // Remove reference from local modules list
        _process.modules().RemoveManualModule( pImage->FilePath, pImage->PEImage.mType() );
    } 

    // Free activation context memory
    _pAContext.Free();

    // Terminate worker thread
    _process.remote().TerminateWorker();

    _images.clear();

    return true;
}
예제 #2
0
파일: MMap.cpp 프로젝트: MarkHC/Blackbone
	/// <summary>
	/// Unmap all manually mapped modules
	/// </summary>
	/// <returns>true on success</returns>
	bool MMap::UnmapAllModules() {
		for(auto img = _images.rbegin(); img != _images.rend(); ++img) {
			auto pImage = img->get();
			BLACBONE_TRACE(L"ManualMap: Unmapping image '%ls'", pImage->FileName.c_str());
			// Call main
			RunModuleInitializers(pImage, DLL_PROCESS_DETACH);
			// Remove VEH
			if(!(pImage->flags & NoExceptions))
				DisableExceptions(pImage);
			// Remove from loader
			auto mod = _process.Modules().GetModule(pImage->FileName);
			_process.Modules().Unlink(mod);
			// Free memory
			pImage->imgMem.Free();
			// Remove reference from local modules list
			_process.Modules().RemoveManualModule(pImage->FilePath, pImage->peImage.ImageType());
		}
		Cleanup();
		Reset();
		return true;
	}