Files
2022-10-26 12:25:11 +08:00

89 lines
2.4 KiB
C++

#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<sLineAndAddressEntity> vAddressLineEntityList;
sLineInfo()
{
memset(ObjectFileName,0,sizeof(TCHAR)*256);
memset(SourceFileName,0,sizeof(TCHAR)*256);
}
~sLineInfo()
{
vAddressLineEntityList.clear();
}
};
private:
DWORD LoadBaseAddress_;
std::vector<sFuntionInfo> FuntionList_;
std::vector<sLineInfo> 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);
};