#ifndef KX_MEMORY_CHUNK_H #define KX_MEMORY_CHUNK_H #include #include #include #include struct ModuleEntry { std::string imageName; std::string moduleName; DWORD baseAddress; DWORD size; }; typedef std::vector< ModuleEntry > ModuleList; typedef ModuleList::iterator ModuleListIter; class kxMemoryChunk { public: // Methods kxMemoryChunk(size_t size = 0); ~kxMemoryChunk(); void* operator new(size_t size); void operator delete(void* ptr); static kxMemoryChunk* GetBegin(); static kxMemoryChunk* GetEnd(); static unsigned long int GetCount(); static void Delete(void* data_ptr); static void Check(); typedef struct _HelperInfo { bool m_SymbolsInited; STACKFRAME m_StackFrame; CONTEXT m_Context; HMODULE m_hImagehlpDll; DWORD m_ImageType; HANDLE m_hProcess; HANDLE m_hThread; DWORD offsetFromSymbol; } HelperInfo; protected: static void LazyInit(); static bool LazyInitSymbols(); static void LazyCleanup(); static void Dump(kxMemoryChunk* chunk); static bool ReloadSymbols(); static bool FillModuleList( ModuleList& modules, DWORD pid, HANDLE hProcess ); static bool FillModuleListTH32( ModuleList& modules, DWORD pid ); static bool FillModuleListPSAPI( ModuleList& modules, DWORD pid, HANDLE hProcess ); static HelperInfo m_HelperInfo; public: // DATA kxMemoryChunk* m_Prev; kxMemoryChunk* m_Next; void* m_Data; size_t m_Size; protected: // Vsechno zverstvo se deje zde... static kxMemoryChunk* m_Begin; static kxMemoryChunk* m_End; static unsigned long int m_Count; }; void* operator new(size_t size); void operator delete(void* ptr); #endif // KX_MEMORY_CHUNK_H