All pastes #368731 Raw Edit

kxMemoryChunk.h - I

public cpp v1 · immutable
#368731 ·published 2007-02-23 08:38 UTC
rendered paste body
#ifndef KX_MEMORY_CHUNK_H#define KX_MEMORY_CHUNK_H#include <windows.h>#include <DbgHelp.h>#include <vector>#include <string>// SymCleanup()typedef BOOL (__stdcall *tSC)( IN HANDLE hProcess );// SymFunctionTableAccess()typedef PVOID (__stdcall *tSFTA)( HANDLE hProcess, DWORD AddrBase );// SymGetLineFromAddr()typedef BOOL (__stdcall *tSGLFA)( IN HANDLE hProcess, IN DWORD dwAddr, OUT PDWORD pdwDisplacement, OUT PIMAGEHLP_LINE Line );// SymGetModuleBase()typedef DWORD (__stdcall *tSGMB)( IN HANDLE hProcess, IN DWORD dwAddr );// SymGetModuleInfo()typedef BOOL (__stdcall *tSGMI)( IN HANDLE hProcess, IN DWORD dwAddr, OUT PIMAGEHLP_MODULE ModuleInfo );// SymGetOptions()typedef DWORD (__stdcall *tSGO)( VOID );// SymGetSymFromAddr()typedef BOOL (__stdcall *tSGSFA)( IN HANDLE hProcess, IN DWORD dwAddr,	OUT PDWORD pdwDisplacement, OUT PIMAGEHLP_SYMBOL Symbol );// SymInitialize()typedef BOOL (__stdcall *tSI)( IN HANDLE hProcess, IN PSTR UserSearchPath, IN BOOL fInvadeProcess );// SymLoadModule()typedef DWORD (__stdcall *tSLM)( IN HANDLE hProcess, IN HANDLE hFile, IN PSTR ImageName, IN PSTR ModuleName, IN DWORD BaseOfDll, IN DWORD SizeOfDll );// SymSetOptions()typedef DWORD (__stdcall *tSSO)( IN DWORD SymOptions );// StackWalk()typedef BOOL (__stdcall *tSW)( DWORD MachineType, HANDLE hProcess,										HANDLE hThread, LPSTACKFRAME StackFrame, PVOID ContextRecord,										PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,										PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,										PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,										PTRANSLATE_ADDRESS_ROUTINE TranslateAddress );// UnDecorateSymbolName()typedef DWORD (__stdcall WINAPI *tUDSN)( PCSTR DecoratedName, PSTR UnDecoratedName,													 DWORD UndecoratedLength, DWORD Flags );#define MAX_MODULE_NAME32 255#define TH32CS_SNAPMODULE   0x00000008#pragma pack( push, 8 )typedef struct tagMODULEENTRY32{	DWORD   dwSize;	DWORD   th32ModuleID;       // This module	DWORD   th32ProcessID;      // owning process	DWORD   GlblcntUsage;       // Global usage count on the module	DWORD   ProccntUsage;       // Module usage count in th32ProcessID's context	BYTE  * modBaseAddr;        // Base address of module in th32ProcessID's context	DWORD   modBaseSize;        // Size in bytes of module starting at modBaseAddr	HMODULE hModule;            // The hModule of this module in th32ProcessID's context	char    szModule[MAX_MODULE_NAME32 + 1];	char    szExePath[MAX_PATH];} MODULEENTRY32;typedef MODULEENTRY32 *  PMODULEENTRY32;typedef MODULEENTRY32 *  LPMODULEENTRY32;#pragma pack( pop )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 LazyCleanup();	static void LazyInit();	static void Dump(kxMemoryChunk* chunk);	static bool FillModuleList( ModuleList& modules, DWORD pid, HANDLE hProcess );	static void EnumumAndLoadModuleSymbols( HANDLE hProcess, DWORD pid );	static bool FillModuleListPSAPI( ModuleList& modules, DWORD pid, HANDLE hProcess );	static bool FillModuleListTH32( ModuleList& modules, DWORD pid );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 tSC pSC;	static tSFTA pSFTA;	static tSGLFA pSGLFA;	static tSGMB pSGMB;	static tSGMI pSGMI;	static tSGO pSGO;	static tSGSFA pSGSFA;	static tSI pSI;	static tSLM pSLM;	static tSSO pSSO;	static tSW pSW;	static tUDSN pUDSN;};void* operator new(size_t size);void operator delete(void* ptr);#endif // KX_MEMORY_CHUNK_H