#pragma once #include "BaseProcess.h" class CMapProcess : public CBaseProcess { public: struct sFuntionInfo { TCHAR FuntionName[256]; TCHAR ObjectFileName[256]; DWORD FuntionAddress; bool HeaderFile; sFuntionInfo() { memset(FuntionName,0,sizeof(TCHAR)*256); memset(ObjectFileName,0,sizeof(TCHAR)*256); FuntionAddress = 0; HeaderFile = false; } }; struct sLineAndAddressEntity { DWORD LineAddress; UINT SourceLine; sLineAndAddressEntity() { LineAddress = 0x00000; SourceLine = 0; } }; struct sLineInfo { TCHAR ObjectFileName[256]; TCHAR SourceFileName[256]; std::vector vAddressLineEntityList; sLineInfo() { memset(ObjectFileName,0,sizeof(TCHAR)*256); memset(SourceFileName,0,sizeof(TCHAR)*256); } ~sLineInfo() { vAddressLineEntityList.clear(); } }; private: DWORD LoadBaseAddress_; std::vector FuntionList_; std::vector LineinfoList_; public: CMapProcess(void); virtual ~CMapProcess(void); public: bool ReadAddress(FILE* fp); bool ReadSourceLine(FILE* fp); bool GetLoadBaseAddress(FILE* fp); private: bool GetCutFunctionString(const char* pStringLine, char* pString, size_t stringLen, UINT& CutStringCount); bool GetCutAddressString(const char* pStringLine, DWORD& Address, UINT& CutStringCount); bool GetLineObjectFileName(const char* pStringLine, char* pString, size_t stringLen, UINT& CutStringCount); bool GetLineSourceName(const char* pStringLine, char* pString, size_t stringLen, UINT& CutStringCount); bool GetLineAndAddress(const char* pStringLine, int numCount, sLineAndAddressEntity& LineEntity); public: virtual void OnInitation(); virtual bool LoadFile(const TCHAR* SymbolName); virtual void Clean(); virtual bool OnSearch(DWORD ExceptionAddr , sExceptionInfomation& ExceptionInfo ); virtual bool OnSearch(const char* ExceptionAddr,sExceptionInfomation& ExceptionInfo); };