rendered paste body#ifndef KX_MEMORY_CHUNK_H
#define KX_MEMORY_CHUNK_H
#include <windows.h>
#include <DbgHelp.h>
#include <string>
#include <vector>
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();
protected:
static void LazyInit();
static bool LazyInitSymbols();
static void LazyCleanup();
static void Dump(kxMemoryChunk* chunk);
static bool LazyLoadSymbols( HANDLE hProcess, DWORD pid );
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 );
public: // DATA
STACKFRAME m_StackFrame;
CONTEXT m_Context;
kxMemoryChunk* m_Prev;
kxMemoryChunk* m_Next;
void* m_Data;
size_t m_Size;
static HMODULE m_hImagehlpDll;
static DWORD m_ImageType;
static HANDLE m_hProcess;
static HANDLE m_hThread;
protected: // Vsechno zverstvo se deje zde...
static kxMemoryChunk* m_Begin;
static kxMemoryChunk* m_End;
static unsigned long int m_Count;
static bool m_SymbolsInited;
};
void* operator new(size_t size);
void operator delete(void* ptr);
#endif // KX_MEMORY_CHUNK_H