//----------------------------------------------------------------------------- // Walk to a specific module and dump size info //----------------------------------------------------------------------------- int CXboxConsole::DumpModuleSize( const char *pName ) { HRESULT error; PDM_WALK_MODULES pWalkMod = NULL; DMN_MODLOAD modLoad; int size = 0; // iterate and find match do { error = DmWalkLoadedModules( &pWalkMod, &modLoad ); if ( XBDM_NOERR == error && !stricmp( modLoad.Name, pName ) ) { Msg( "0x%8.8x, %5.2f MB, %s\n", modLoad.BaseAddress, modLoad.Size/( 1024.0f*1024.0f ), modLoad.Name ); size = modLoad.Size; error = XBDM_ENDOFLIST; } } while ( XBDM_NOERR == error ); DmCloseLoadedModules( pWalkMod ); if ( error != XBDM_ENDOFLIST ) { Warning( "DmWalkLoadedModules() failed.\n" ); } return size; }
bool CXboxDebugger::GetLoadedModules(std::vector<CModule>& modules) { PDM_WALK_MODULES pWalkMod = NULL; DMN_MODLOAD modLoad; HRESULT xbres = 0; g_log.Log(LOG_INFO, "CXboxDebugger::GetLoadedModules, Setting up connection with the default xbox"); xbres = DmWalkLoadedModules(&pWalkMod, &modLoad); if (XBDM_NOERR != xbres) { g_log.Log(LOG_INFO, "CXboxDebugger::GetLoadedModules, failed setting up connection"); return false; } while (XBDM_NOERR == xbres) { CModule module; module.loadAddress = (DWORD)modLoad.BaseAddress; module.name = modLoad.Name; module.size = modLoad.Size; module.signature = modLoad.TimeStamp; modules.push_back(module); xbres = DmWalkLoadedModules(&pWalkMod, &modLoad); } DmCloseLoadedModules(pWalkMod); return true; }
LPVOID GetXbdmBaseAddress() { PDM_WALK_MODULES pWalkMod = NULL; LPVOID pBaseAddress=NULL; DMN_MODLOAD modLoad; HRESULT error; // Look for xbdm.dll, if its loaded... while((error=DmWalkLoadedModules(&pWalkMod, &modLoad))==XBDM_NOERR) { if (stricmp(modLoad.Name, "xbdm.dll")==0) { // ... and get its base address // where the dll is loaded into // memory. pBaseAddress=modLoad.BaseAddress; break; } } if (pWalkMod) DmCloseLoadedModules(pWalkMod); return pBaseAddress; }