/// <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; }
/// <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; }