DbgMiniDump.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include "DebugCommon.h"
  3. #include "BeefySysLib/util/MappedFile.h"
  4. #include "Beef/BfCommon.h"
  5. NS_BF_BEGIN
  6. enum DbgMiniDumpStreamType : uint32
  7. {
  8. DbgMiniDumpStreamType_ThreadList = 3,
  9. DbgMiniDumpStreamType_ModuleList = 4,
  10. DbgMiniDumpStreamType_MemoryLists = 5,
  11. DbgMiniDumpStreamType_Exception = 6,
  12. DbgMiniDumpStreamType_SystemInfo = 7,
  13. DbgMiniDumpStreamType_ThreadEx = 8,
  14. DbgMiniDumpStreamType_Memory64List = 9,
  15. DbgMiniDumpStreamType_CommentA = 10,
  16. DbgMiniDumpStreamType_CommentW = 11,
  17. DbgMiniDumpStreamType_HandleData = 12,
  18. DbgMiniDumpStreamType_FunctionTable = 13,
  19. DbgMiniDumpStreamType_UnloadedModuleList = 14,
  20. DbgMiniDumpStreamType_MiscInfo = 15,
  21. DbgMiniDumpStreamType_MemoryInfoList = 16,
  22. DbgMiniDumpStreamType_ThreadInfoList = 17,
  23. DbgMiniDumpStreamType_HandleOperationList = 18
  24. };
  25. //MINIDUMP_SYSTEM_INFO
  26. struct StreamDirectoryEntry
  27. {
  28. DbgMiniDumpStreamType mStreamType;
  29. uint32 mDataSize;
  30. uint32 mDataRVA;
  31. };
  32. class DbgMiniDump
  33. {
  34. public:
  35. MappedFile mMF;
  36. BfSizedArray<StreamDirectoryEntry> mDirectory;
  37. public:
  38. bool StartLoad(const StringImpl& path);
  39. int GetTargetBitCount();
  40. template <typename T>
  41. T& GetStreamData(const StreamDirectoryEntry& entry)
  42. {
  43. return *(T*)((uint8*)mMF.mData + entry.mDataRVA);
  44. }
  45. template <typename T>
  46. T& GetData(uint32 rva)
  47. {
  48. return *(T*)((uint8*)mMF.mData + rva);
  49. }
  50. };
  51. NS_BF_END