imagehlp.h
来自「这是VCF框架的代码」· C头文件 代码 · 共 2,420 行 · 第 1/5 页
H
2,420 行
TI_GET_DATAKIND, TI_GET_ADDRESSOFFSET, TI_GET_OFFSET, TI_GET_VALUE, TI_GET_COUNT, TI_GET_CHILDRENCOUNT, TI_GET_BITPOSITION, TI_GET_VIRTUALBASECLASS, TI_GET_VIRTUALTABLESHAPEID, TI_GET_VIRTUALBASEPOINTEROFFSET, TI_GET_CLASSPARENTID, TI_GET_NESTED, TI_GET_SYMINDEX, TI_GET_LEXICALPARENT, TI_GET_ADDRESS, TI_GET_THISADJUST,} IMAGEHLP_SYMBOL_TYPE_INFO;typedef struct _TI_FINDCHILDREN_PARAMS { ULONG Count; ULONG Start; ULONG ChildId[1];} TI_FINDCHILDREN_PARAMS;BOOLIMAGEAPISymGetTypeInfo( IN HANDLE hProcess, IN DWORD64 ModBase, IN ULONG TypeId, IN IMAGEHLP_SYMBOL_TYPE_INFO GetType, OUT PVOID pInfo );BOOLIMAGEAPISymEnumTypes( IN HANDLE hProcess, IN ULONG64 BaseOfDll, IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, IN PVOID UserContext );BOOLIMAGEAPISymGetTypeFromName( IN HANDLE hProcess, IN ULONG64 BaseOfDll, IN LPSTR Name, OUT PSYMBOL_INFO Symbol );//// Full user-mode dump creation.//typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)( DWORD DataType, PVOID* Data, LPDWORD DataLength, PVOID UserData );BOOLWINAPIDbgHelpCreateUserDump( IN LPSTR FileName, IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, IN PVOID UserData );BOOLWINAPIDbgHelpCreateUserDumpW( IN LPWSTR FileName, IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, IN PVOID UserData );// -----------------------------------------------------------------// The following 4 legacy APIs are fully supported, but newer// ones are recommended. SymFromName and SymFromAddr provide// much more detailed info on the returned symbol.BOOLIMAGEAPISymGetSymFromAddr64( IN HANDLE hProcess, IN DWORD64 qwAddr, OUT PDWORD64 pdwDisplacement, OUT PIMAGEHLP_SYMBOL64 Symbol );#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)#define SymGetSymFromAddr SymGetSymFromAddr64#elseBOOLIMAGEAPISymGetSymFromAddr( IN HANDLE hProcess, IN DWORD dwAddr, OUT PDWORD pdwDisplacement, OUT PIMAGEHLP_SYMBOL Symbol );#endif// While following two APIs will provide a symbol from a name,// SymEnumSymbols can provide the same matching information// for ALL symbols with a matching name, even regular// expressions. That way you can search across modules// and differentiate between identically named symbols.BOOLIMAGEAPISymGetSymFromName64( IN HANDLE hProcess, IN PSTR Name, OUT PIMAGEHLP_SYMBOL64 Symbol );#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)#define SymGetSymFromName SymGetSymFromName64#elseBOOLIMAGEAPISymGetSymFromName( IN HANDLE hProcess, IN PSTR Name, OUT PIMAGEHLP_SYMBOL Symbol );#endif// -----------------------------------------------------------------// The following APIs exist only for backwards compatibility// with a pre-release version documented in an MSDN release.// You should use SymFindFileInPath if you want to maintain// future compatibility.DBHLP_DEPRECIATEDBOOLIMAGEAPIFindFileInPath( HANDLE hprocess, LPSTR SearchPath, LPSTR FileName, PVOID id, DWORD two, DWORD three, DWORD flags, LPSTR FilePath );// You should use SymFindFileInPath if you want to maintain// future compatibility.DBHLP_DEPRECIATEDBOOLIMAGEAPIFindFileInSearchPath( HANDLE hprocess, LPSTR SearchPath, LPSTR FileName, DWORD one, DWORD two, DWORD three, LPSTR FilePath );DBHLP_DEPRECIATEDBOOLIMAGEAPISymEnumSym( IN HANDLE hProcess, IN ULONG64 BaseOfDll, IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, IN PVOID UserContext );#include <pshpack4.h>#pragma warning(disable:4200) // Zero length array#define MINIDUMP_SIGNATURE ('PMDM')#define MINIDUMP_VERSION (42899)typedef DWORD RVA;typedef ULONG64 RVA64;typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { ULONG32 DataSize; RVA Rva;} MINIDUMP_LOCATION_DESCRIPTOR;typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 { ULONG64 DataSize; RVA64 Rva;} MINIDUMP_LOCATION_DESCRIPTOR64;typedef struct _MINIDUMP_MEMORY_DESCRIPTOR { ULONG64 StartOfMemoryRange; MINIDUMP_LOCATION_DESCRIPTOR Memory;} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;// DESCRIPTOR64 is used for full-memory minidumps where// all of the raw memory is laid out sequentially at the// end of the dump. There is no need for individual RVAs// as the RVA is the base RVA plus the sum of the preceeding// data blocks.typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 { ULONG64 StartOfMemoryRange; ULONG64 DataSize;} MINIDUMP_MEMORY_DESCRIPTOR64, *PMINIDUMP_MEMORY_DESCRIPTOR64;typedef struct _MINIDUMP_HEADER { ULONG32 Signature; ULONG32 Version; ULONG32 NumberOfStreams; RVA StreamDirectoryRva; ULONG32 CheckSum; union { ULONG32 Reserved; ULONG32 TimeDateStamp; }; ULONG64 Flags;} MINIDUMP_HEADER, *PMINIDUMP_HEADER;//// The MINIDUMP_HEADER field StreamDirectoryRva points to // an array of MINIDUMP_DIRECTORY structures.//typedef struct _MINIDUMP_DIRECTORY { ULONG32 StreamType; MINIDUMP_LOCATION_DESCRIPTOR Location;} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;typedef struct _MINIDUMP_STRING { ULONG32 Length; // Length in bytes of the string WCHAR Buffer [0]; // Variable size buffer} MINIDUMP_STRING, *PMINIDUMP_STRING;//// The MINIDUMP_DIRECTORY field StreamType may be one of the following types.// Types will be added in the future, so if a program reading the minidump// header encounters a stream type it does not understand it should ignore// the data altogether. Any tag above LastReservedStream will not be used by// the system and is reserved for program-specific information.//typedef enum _MINIDUMP_STREAM_TYPE { UnusedStream = 0, ReservedStream0 = 1, ReservedStream1 = 2, ThreadListStream = 3, ModuleListStream = 4, MemoryListStream = 5, ExceptionStream = 6, SystemInfoStream = 7, ThreadExListStream = 8, Memory64ListStream = 9, CommentStreamA = 10, CommentStreamW = 11, HandleDataStream = 12, FunctionTableStream = 13, LastReservedStream = 0xffff} MINIDUMP_STREAM_TYPE;//// The minidump system information contains processor and// Operating System specific information.// typedef struct _MINIDUMP_SYSTEM_INFO { // // ProcessorArchitecture, ProcessorLevel and ProcessorRevision are all // taken from the SYSTEM_INFO structure obtained by GetSystemInfo( ). // USHORT ProcessorArchitecture; USHORT ProcessorLevel; USHORT ProcessorRevision; USHORT Reserved0; // Reserved for future use. Must be zero. // // MajorVersion, MinorVersion, BuildNumber, PlatformId and // CSDVersion are all taken from the OSVERSIONINFO structure // returned by GetVersionEx( ). // ULONG32 MajorVersion; ULONG32 MinorVersion; ULONG32 BuildNumber; ULONG32 PlatformId; // // RVA to a CSDVersion string in the string table. // RVA CSDVersionRva; ULONG32 Reserved1; // Reserved for future use. // // CPU information is obtained from one of two places. // // 1) On x86 computers, CPU_INFORMATION is obtained from the CPUID // instruction. You must use the X86 portion of the union for X86 // computers. // // 2) On non-x86 architectures, CPU_INFORMATION is obtained by calling // IsProcessorFeatureSupported(). // union _CPU_INFORMATION { // // X86 platforms use CPUID function to obtain processor information. // struct { // // CPUID Subfunction 0, register EAX (VendorId [0]), // EBX (VendorId [1]) and ECX (VendorId [2]). // ULONG32 VendorId [ 3 ]; // // CPUID Subfunction 1, register EAX // ULONG32 VersionInformation; // // CPUID Subfunction 1, register EDX // ULONG32 FeatureInformation; // // CPUID, Subfunction 80000001, register EBX. This will only // be obtained if the vendor id is "AuthenticAMD". // ULONG32 AMDExtendedCpuFeatures; } X86CpuInfo; // // Non-x86 platforms use processor feature flags. // struct { ULONG64 ProcessorFeatures [ 2 ]; } OtherCpuInfo; } Cpu;} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;typedef union _CPU_INFORMATION CPU_INFORMATION, *PCPU_INFORMATION;//// The minidump thread contains standard thread// information plus an RVA to the memory for this // thread and an RVA to the CONTEXT structure for// this thread.////// ThreadId must be 4 bytes on all architectures.//C_ASSERT (sizeof ( ((PPROCESS_INFORMATION)0)->dwThreadId ) == 4);typedef struct _MINIDUMP_THREAD { ULONG32 ThreadId; ULONG32 SuspendCount; ULONG32 PriorityClass; ULONG32 Priority; ULONG64 Teb; MINIDUMP_MEMORY_DESCRIPTOR Stack; MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;} MINIDUMP_THREAD, *PMINIDUMP_THREAD;//// The thread list is a container of threads.//typedef struct _MINIDUMP_THREAD_LIST { ULONG32 NumberOfThreads; MINIDUMP_THREAD Threads [0];} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;typedef struct _MINIDUMP_THREAD_EX { ULONG32 ThreadId; ULONG32 SuspendCount; ULONG32 PriorityClass; ULONG32 Priority; ULONG64 Teb; MINIDUMP_MEMORY_DESCRIPTOR Stack; MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; MINIDUMP_MEMORY_DESCRIPTOR BackingStore;} MINIDUMP_THREAD_EX, *PMINIDUMP_THREAD_EX;//// The thread list is a container of threads.//typedef struct _MINIDUMP_THREAD_EX_LIST { ULONG32 NumberOfThreads; MINIDUMP_THREAD_EX Threads [0];} MINIDUMP_THREAD_EX_LIST, *PMINIDUMP_THREAD_EX_LIST;//// The MINIDUMP_EXCEPTION is the same as EXCEPTION on Win64.//typedef struct _MINIDUMP_EXCEPTION { ULONG32 ExceptionCode; ULONG32 ExceptionFlags; ULONG64 ExceptionRecord; ULONG64 ExceptionAddress; ULONG32 NumberParameters; ULONG32 __unusedAlignment; ULONG64 ExceptionInformation [ EXCEPTION_MAXIMUM_PARAMETERS ];} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;//// The exception information stream contains the id of the thread that caused// the exception (ThreadId), the exception record for the exception// (ExceptionRecord) and an RVA to the thread context where the exception// occured.//typedef struct MINIDUMP_EXCEPTION_STREAM { ULONG32 ThreadId; ULONG32 __alignment; MINIDUMP_EXCEPTION ExceptionRecord; MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;//// The MINIDUMP_MODULE contains information about a// a specific module. It includes the CheckSum and// the TimeDateStamp for the module so the module// can be reloaded during the analysis phase.//typedef struct _MINIDUMP_MODULE { ULONG64 BaseOfImage; ULONG32 SizeOfImage; ULONG32 CheckSum; ULONG32 TimeDateStamp; RVA ModuleNameRva; VS_FIXEDFILEINFO VersionInfo; MINIDUMP_LOCATION_DESCRIPTOR CvRecord; MINIDUMP_LOCATION_DESCRIPTOR MiscRecord; ULONG64 Reserved0; // Reserved for future use.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?