| /* |
| * Declarations for DBGHELP |
| * |
| * Copyright (C) 2003 Eric Pouech |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| |
| #ifndef __WINE_DBGHELP_H |
| #define __WINE_DBGHELP_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* defined(__cplusplus) */ |
| |
| typedef struct _LOADED_IMAGE |
| { |
| LPSTR ModuleName; |
| HANDLE hFile; |
| PUCHAR MappedAddress; |
| PIMAGE_NT_HEADERS FileHeader; |
| PIMAGE_SECTION_HEADER LastRvaSection; |
| ULONG NumberOfSections; |
| PIMAGE_SECTION_HEADER Sections; |
| ULONG Characteristics; |
| BOOLEAN fSystemImage; |
| BOOLEAN fDOSImage; |
| LIST_ENTRY Links; |
| ULONG SizeOfImage; |
| } LOADED_IMAGE, *PLOADED_IMAGE; |
| |
| /************************* |
| * IMAGEHLP equiv * |
| *************************/ |
| |
| typedef enum |
| { |
| AddrMode1616, |
| AddrMode1632, |
| AddrModeReal, |
| AddrModeFlat |
| } ADDRESS_MODE; |
| |
| typedef struct _tagADDRESS |
| { |
| DWORD Offset; |
| WORD Segment; |
| ADDRESS_MODE Mode; |
| } ADDRESS, *LPADDRESS; |
| |
| #define SYMF_OMAP_GENERATED 0x00000001 |
| #define SYMF_OMAP_MODIFIED 0x00000002 |
| #define SYMF_USER_GENERATED 0x00000004 |
| #define SYMF_REGISTER 0x00000008 |
| #define SYMF_REGREL 0x00000010 |
| #define SYMF_FRAMEREL 0x00000020 |
| #define SYMF_PARAMETER 0x00000040 |
| #define SYMF_LOCAL 0x00000080 |
| #define SYMF_CONSTANT 0x00000100 |
| #define SYMF_EXPORT 0x00000200 |
| #define SYMF_FORWARDER 0x00000400 |
| #define SYMF_FUNCTION 0x00000800 |
| #define SYMF_VIRTUAL 0x00001000 |
| #define SYMF_THUNK 0x00002000 |
| #define SYMF_TLSREL 0x00004000 |
| |
| typedef enum |
| { |
| SymNone = 0, |
| SymCoff, |
| SymCv, |
| SymPdb, |
| SymExport, |
| SymDeferred, |
| SymSym, |
| SymDia, |
| NumSymTypes |
| } SYM_TYPE; |
| |
| typedef struct _IMAGEHLP_SYMBOL |
| { |
| DWORD SizeOfStruct; |
| DWORD Address; |
| DWORD Size; |
| DWORD Flags; |
| DWORD MaxNameLength; |
| CHAR Name[1]; |
| } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL; |
| |
| typedef struct _IMAGEHLP_MODULE |
| { |
| DWORD SizeOfStruct; |
| DWORD BaseOfImage; |
| DWORD ImageSize; |
| DWORD TimeDateStamp; |
| DWORD CheckSum; |
| DWORD NumSyms; |
| SYM_TYPE SymType; |
| CHAR ModuleName[32]; |
| CHAR ImageName[256]; |
| CHAR LoadedImageName[256]; |
| } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE; |
| |
| typedef struct _IMAGEHLP_MODULEW { |
| DWORD SizeOfStruct; |
| DWORD BaseOfImage; |
| DWORD ImageSize; |
| DWORD TimeDateStamp; |
| DWORD CheckSum; |
| DWORD NumSyms; |
| SYM_TYPE SymType; |
| WCHAR ModuleName[32]; |
| WCHAR ImageName[256]; |
| WCHAR LoadedImageName[256]; |
| } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW; |
| |
| typedef struct _IMAGEHLP_LINE |
| { |
| DWORD SizeOfStruct; |
| PVOID Key; |
| DWORD LineNumber; |
| PCHAR FileName; |
| DWORD Address; |
| } IMAGEHLP_LINE, *PIMAGEHLP_LINE; |
| |
| typedef struct _SOURCEFILE |
| { |
| DWORD ModBase; |
| PCHAR FileName; |
| } SOURCEFILE, *PSOURCEFILE; |
| |
| #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001 |
| #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002 |
| #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003 |
| #define CBA_SYMBOLS_UNLOADED 0x00000004 |
| #define CBA_DUPLICATE_SYMBOL 0x00000005 |
| #define CBA_READ_MEMORY 0x00000006 |
| #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007 |
| #define CBA_SET_OPTIONS 0x00000008 |
| #define CBA_EVENT 0x00000010 |
| #define CBA_DEBUG_INFO 0x10000000 |
| |
| typedef struct _IMAGEHLP_CBA_READ_MEMORY |
| { |
| DWORD addr; |
| PVOID buf; |
| DWORD bytes; |
| DWORD *bytesread; |
| } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY; |
| |
| enum { |
| sevInfo = 0, |
| sevProblem, |
| sevAttn, |
| sevFatal, |
| sevMax |
| }; |
| |
| typedef struct _IMAGEHLP_CBA_EVENT |
| { |
| DWORD severity; |
| DWORD code; |
| PCHAR desc; |
| PVOID object; |
| } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT; |
| |
| typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD |
| { |
| DWORD SizeOfStruct; |
| DWORD64 BaseOfImage; |
| DWORD CheckSum; |
| DWORD TimeDateStamp; |
| CHAR FileName[MAX_PATH]; |
| BOOLEAN Reparse; |
| } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD; |
| |
| typedef struct _IMAGEHLP_DUPLICATE_SYMBOL |
| { |
| DWORD SizeOfStruct; |
| DWORD NumberOfDups; |
| PIMAGEHLP_SYMBOL Symbol; |
| DWORD SelectedSymbol; |
| } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL; |
| |
| #define SYMOPT_CASE_INSENSITIVE 0x00000001 |
| #define SYMOPT_UNDNAME 0x00000002 |
| #define SYMOPT_DEFERRED_LOADS 0x00000004 |
| #define SYMOPT_NO_CPP 0x00000008 |
| #define SYMOPT_LOAD_LINES 0x00000010 |
| #define SYMOPT_OMAP_FIND_NEAREST 0x00000020 |
| #define SYMOPT_LOAD_ANYTHING 0x00000040 |
| #define SYMOPT_IGNORE_CVREC 0x00000080 |
| #define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100 |
| #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200 |
| #define SYMOPT_EXACT_SYMBOLS 0x00000400 |
| #define SYMOPT_WILD_UNDERSCORE 0x00000800 |
| #define SYMOPT_USE_DEFAULTS 0x00001000 |
| #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 |
| #define SYMOPT_PUBLICS_ONLY 0x00004000 |
| #define SYMOPT_NO_PUBLICS 0x00008000 |
| #define SYMOPT_AUTO_PUBLICS 0x00010000 |
| #define SYMOPT_NO_IMAGE_SEARCH 0x00020000 |
| #define SYMOPT_SECURE 0x00040000 |
| #define SYMOPT_NO_PROMPTS 0x00080000 |
| |
| #define SYMOPT_DEBUG 0x80000000 |
| |
| typedef struct _IMAGEHLP_STACK_FRAME |
| { |
| ULONG InstructionOffset; |
| ULONG ReturnOffset; |
| ULONG FrameOffset; |
| ULONG StackOffset; |
| ULONG BackingStoreOffset; |
| ULONG FuncTableEntry; |
| ULONG Params[4]; |
| ULONG Reserved[5]; |
| BOOL Virtual; |
| ULONG Reserved2; |
| } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; |
| |
| typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; |
| |
| #define DBHHEADER_DEBUGDIRS 0x1 |
| typedef struct _DBGHELP_MODLOAD_DATA |
| { |
| DWORD ssize; |
| DWORD ssig; |
| PVOID data; |
| DWORD size; |
| DWORD flags; |
| } MODLOAD_DATA, *PMODLOAD_DATA; |
| |
| /************************* |
| * MiniDUMP * |
| *************************/ |
| |
| /* DebugHelp */ |
| |
| #define MINIDUMP_SIGNATURE 0x4D444D50 /* 'PMDM' */ |
| #define MINIDUMP_VERSION (42899) |
| |
| typedef DWORD RVA; |
| typedef ULONG64 RVA64; |
| |
| typedef enum _MINIDUMP_TYPE |
| { |
| MiniDumpNormal = 0x0000, |
| MiniDumpWithDataSegs = 0x0001, |
| MiniDumpWithFullMemory = 0x0002, |
| MiniDumpWithHandleData = 0x0004, |
| MiniDumpFilterMemory = 0x0008, |
| MiniDumpScanMemory = 0x0010 |
| } MINIDUMP_TYPE; |
| |
| typedef enum _MINIDUMP_CALLBACK_TYPE |
| { |
| ModuleCallback, |
| ThreadCallback, |
| ThreadExCallback, |
| IncludeThreadCallback, |
| IncludeModuleCallback, |
| } MINIDUMP_CALLBACK_TYPE; |
| |
| typedef struct _MINIDUMP_THREAD_CALLBACK |
| { |
| ULONG ThreadId; |
| HANDLE ThreadHandle; |
| CONTEXT Context; |
| ULONG SizeOfContext; |
| ULONGLONG StackBase; |
| ULONG64 StackEnd; |
| } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; |
| |
| typedef struct _MINIDUMP_THREAD_EX_CALLBACK |
| { |
| ULONG ThreadId; |
| HANDLE ThreadHandle; |
| CONTEXT Context; |
| ULONG SizeOfContext; |
| ULONGLONG StackBase; |
| ULONGLONG StackEnd; |
| ULONGLONG BackingStoreBase; |
| ULONGLONG BackingStoreEnd; |
| } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK; |
| |
| typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK |
| { |
| ULONG ThreadId; |
| } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK; |
| |
| typedef enum _THREAD_WRITE_FLAGS |
| { |
| ThreadWriteThread = 0x0001, |
| ThreadWriteStack = 0x0002, |
| ThreadWriteContext = 0x0004, |
| ThreadWriteBackingStore = 0x0008, |
| ThreadWriteInstructionWindow = 0x0010 |
| } THREAD_WRITE_FLAGS; |
| |
| typedef struct _MINIDUMP_MODULE_CALLBACK |
| { |
| PWCHAR FullPath; |
| ULONGLONG BaseOfImage; |
| ULONG SizeOfImage; |
| ULONG CheckSum; |
| ULONG TimeDateStamp; |
| VS_FIXEDFILEINFO VersionInfo; |
| PVOID CvRecord; |
| ULONG SizeOfCvRecord; |
| PVOID MiscRecord; |
| ULONG SizeOfMiscRecord; |
| } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK; |
| |
| typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK |
| { |
| ULONG64 BaseOfImage; |
| } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK; |
| |
| typedef enum _MODULE_WRITE_FLAGS |
| { |
| ModuleWriteModule = 0x0001, |
| ModuleWriteDataSeg = 0x0002, |
| ModuleWriteMiscRecord = 0x0004, |
| ModuleWriteCvRecord = 0x0008, |
| ModuleReferencedByMemory = 0x0010 |
| } MODULE_WRITE_FLAGS; |
| |
| typedef struct _MINIDUMP_CALLBACK_INPUT |
| { |
| ULONG ProcessId; |
| HANDLE ProcessHandle; |
| ULONG CallbackType; |
| union |
| { |
| MINIDUMP_THREAD_CALLBACK Thread; |
| MINIDUMP_THREAD_EX_CALLBACK ThreadEx; |
| MINIDUMP_MODULE_CALLBACK Module; |
| MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread; |
| MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule; |
| } u; |
| } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT; |
| |
| typedef struct _MINIDUMP_CALLBACK_OUTPUT |
| { |
| union |
| { |
| ULONG ModuleWriteFlags; |
| ULONG ThreadWriteFlags; |
| } u; |
| } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT; |
| |
| typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam, |
| const PMINIDUMP_CALLBACK_INPUT CallbackInput, |
| PMINIDUMP_CALLBACK_OUTPUT CallbackOutput); |
| |
| typedef struct _MINIDUMP_CALLBACK_INFORMATION |
| { |
| MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; |
| void* CallbackParam; |
| } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION; |
| |
| typedef struct _MINIDUMP_LOCATION_DESCRIPTOR |
| { |
| ULONG DataSize; |
| RVA Rva; |
| } MINIDUMP_LOCATION_DESCRIPTOR; |
| |
| typedef struct _MINIDUMP_DIRECTORY |
| { |
| ULONG StreamType; |
| MINIDUMP_LOCATION_DESCRIPTOR Location; |
| } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY; |
| |
| typedef struct _MINIDUMP_EXCEPTION |
| { |
| ULONG ExceptionCode; |
| ULONG ExceptionFlags; |
| ULONGLONG ExceptionRecord; |
| ULONGLONG ExceptionAddress; |
| ULONG NumberParameters; |
| ULONG __unusedAlignment; |
| ULONGLONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; |
| } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION; |
| |
| typedef struct _MINIDUMP_EXCEPTION_INFORMATION |
| { |
| DWORD ThreadId; |
| PEXCEPTION_POINTERS ExceptionPointers; |
| BOOL ClientPointers; |
| } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION; |
| |
| typedef struct MINIDUMP_EXCEPTION_STREAM |
| { |
| ULONG ThreadId; |
| ULONG __alignment; |
| MINIDUMP_EXCEPTION ExceptionRecord; |
| MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; |
| } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM; |
| |
| typedef struct _MINIDUMP_HEADER |
| { |
| DWORD Signature; |
| DWORD Version; |
| DWORD NumberOfStreams; |
| RVA StreamDirectoryRva; |
| DWORD CheckSum; |
| union |
| { |
| DWORD Reserved; |
| DWORD TimeDateStamp; |
| } u; |
| ULONGLONG Flags; |
| } MINIDUMP_HEADER, *PMINIDUMP_HEADER; |
| |
| typedef struct _MINIDUMP_MEMORY_DESCRIPTOR |
| { |
| ULONGLONG StartOfMemoryRange; |
| MINIDUMP_LOCATION_DESCRIPTOR Memory; |
| } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR; |
| |
| typedef struct _MINIDUMP_MODULE |
| { |
| ULONGLONG BaseOfImage; |
| ULONG SizeOfImage; |
| ULONG CheckSum; |
| ULONG TimeDateStamp; |
| RVA ModuleNameRva; |
| VS_FIXEDFILEINFO VersionInfo; |
| MINIDUMP_LOCATION_DESCRIPTOR CvRecord; |
| MINIDUMP_LOCATION_DESCRIPTOR MiscRecord; |
| ULONGLONG Reserved0; |
| ULONGLONG Reserved1; |
| } MINIDUMP_MODULE, *PMINIDUMP_MODULE; |
| |
| typedef struct _MINIDUMP_MODULE_LIST |
| { |
| ULONG NumberOfModules; |
| MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */ |
| } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST; |
| |
| typedef struct _MINIDUMP_USER_STREAM |
| { |
| ULONG Type; |
| ULONG BufferSize; |
| void* Buffer; |
| } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM; |
| |
| typedef struct _MINIDUMP_USER_STREAM_INFORMATION |
| { |
| ULONG UserStreamCount; |
| PMINIDUMP_USER_STREAM UserStreamArray; |
| } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_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; |
| |
| typedef struct _MINIDUMP_SYSTEM_INFO |
| { |
| USHORT ProcessorArchitecture; |
| USHORT ProcessorLevel; |
| USHORT ProcessorRevision; |
| USHORT Reserved0; |
| |
| ULONG MajorVersion; |
| ULONG MinorVersion; |
| ULONG BuildNumber; |
| ULONG PlatformId; |
| |
| RVA CSDVersionRva; |
| ULONG Reserved1; |
| union _CPU_INFORMATION |
| { |
| struct |
| { |
| ULONG VendorId[3]; |
| ULONG VersionInformation; |
| ULONG FeatureInformation; |
| ULONG AMDExtendedCpuFeatures; |
| } X86CpuInfo; |
| struct |
| { |
| ULONGLONG ProcessorFeatures[2]; |
| } OtherCpuInfo; |
| } Cpu; |
| |
| } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO; |
| |
| typedef struct _MINIDUMP_THREAD |
| { |
| ULONG ThreadId; |
| ULONG SuspendCount; |
| ULONG PriorityClass; |
| ULONG Priority; |
| ULONGLONG Teb; |
| MINIDUMP_MEMORY_DESCRIPTOR Stack; |
| MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; |
| } MINIDUMP_THREAD, *PMINIDUMP_THREAD; |
| |
| typedef struct _MINIDUMP_THREAD_LIST |
| { |
| ULONG NumberOfThreads; |
| MINIDUMP_THREAD Threads[1]; /* FIXME: no support of 0 sized array */ |
| } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST; |
| |
| BOOL WINAPI MiniDumpWriteDump(HANDLE,DWORD,HANDLE,MINIDUMP_TYPE,const PMINIDUMP_EXCEPTION_INFORMATION, |
| const PMINIDUMP_USER_STREAM_INFORMATION,const PMINIDUMP_CALLBACK_INFORMATION); |
| BOOL WINAPI MiniDumpReadDumpStream(PVOID,ULONG,PMINIDUMP_DIRECTORY*,PVOID*,ULONG*); |
| |
| |
| /************************* |
| * MODULE handling * |
| *************************/ |
| typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PSTR ModuleName, DWORD ModuleBase, |
| ULONG ModuleSize, PVOID UserContext); |
| extern BOOL WINAPI EnumerateLoadedModules(HANDLE hProcess, |
| PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback, |
| PVOID UserContext); |
| typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR ModuleName, DWORD BaseOfDll, |
| PVOID UserContext); |
| extern BOOL WINAPI SymEnumerateModules(HANDLE hProcess, |
| PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, |
| PVOID UserContext); |
| extern BOOL WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr, |
| PIMAGEHLP_MODULE ModuleInfo); |
| extern BOOL WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr, |
| PIMAGEHLP_MODULEW ModuleInfo); |
| extern DWORD WINAPI SymGetModuleBase(HANDLE hProcess, DWORD dwAddr); |
| extern DWORD WINAPI SymLoadModule(HANDLE hProcess, HANDLE hFile, PSTR ImageName, |
| PSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll); |
| extern DWORD WINAPI SymLoadModuleEx(HANDLE hProcess, HANDLE hFile, PSTR ImageName, |
| PSTR ModuleName, DWORD BaseOfDll, DWORD DllSize, |
| PMODLOAD_DATA Data, DWORD Flags); |
| extern BOOL WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll); |
| |
| /************************* |
| * Symbol Handling * |
| *************************/ |
| |
| #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1 |
| #define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER /* 0x08 */ |
| #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL /* 0x10 */ |
| #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL /* 0x20 */ |
| #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER /* 0x40 */ |
| #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL /* 0x80 */ |
| #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT /* 0x100 */ |
| #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION /* 0x800 */ |
| |
| #define SYMFLAG_VALUEPRESENT 0x00000001 |
| #define SYMFLAG_REGISTER 0x00000008 |
| #define SYMFLAG_REGREL 0x00000010 |
| #define SYMFLAG_FRAMEREL 0x00000020 |
| #define SYMFLAG_PARAMETER 0x00000040 |
| #define SYMFLAG_LOCAL 0x00000080 |
| #define SYMFLAG_CONSTANT 0x00000100 |
| #define SYMFLAG_EXPORT 0x00000200 |
| #define SYMFLAG_FORWARDER 0x00000400 |
| #define SYMFLAG_FUNCTION 0x00000800 |
| #define SYMFLAG_VIRTUAL 0x00001000 |
| #define SYMFLAG_THUNK 0x00002000 |
| #define SYMFLAG_TLSREL 0x00004000 |
| |
| typedef struct _SYMBOL_INFO |
| { |
| ULONG SizeOfStruct; |
| ULONG TypeIndex; |
| ULONG Reserved[2]; |
| ULONG info; /* sdk states info, while MSDN says it's Index... */ |
| ULONG Size; |
| ULONG ModBase; |
| ULONG Flags; |
| ULONG Value; |
| ULONG Address; |
| ULONG Register; |
| ULONG Scope; |
| ULONG Tag; |
| ULONG NameLen; |
| ULONG MaxNameLen; |
| CHAR Name[1]; |
| } SYMBOL_INFO, *PSYMBOL_INFO; |
| |
| typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO |
| { |
| TI_GET_SYMTAG, |
| TI_GET_SYMNAME, |
| TI_GET_LENGTH, |
| TI_GET_TYPE, |
| TI_GET_TYPEID, |
| TI_GET_BASETYPE, |
| TI_GET_ARRAYINDEXTYPEID, |
| TI_FINDCHILDREN, |
| 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, |
| TI_GET_UDTKIND, |
| TI_IS_EQUIV_TO, |
| TI_GET_CALLING_CONVENTION, |
| } IMAGEHLP_SYMBOL_TYPE_INFO; |
| |
| typedef struct _TI_FINDCHILDREN_PARAMS |
| { |
| ULONG Count; |
| ULONG Start; |
| ULONG ChildId[1]; |
| } TI_FINDCHILDREN_PARAMS; |
| |
| #define UNDNAME_COMPLETE (0x0000) |
| #define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) |
| #define UNDNAME_NO_MS_KEYWORDS (0x0002) |
| #define UNDNAME_NO_FUNCTION_RETURNS (0x0004) |
| #define UNDNAME_NO_ALLOCATION_MODEL (0x0008) |
| #define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010) |
| #define UNDNAME_NO_MS_THISTYPE (0x0020) |
| #define UNDNAME_NO_CV_THISTYPE (0x0040) |
| #define UNDNAME_NO_THISTYPE (0x0060) |
| #define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080) |
| #define UNDNAME_NO_THROW_SIGNATURES (0x0100) |
| #define UNDNAME_NO_MEMBER_TYPE (0x0200) |
| #define UNDNAME_NO_RETURN_UDT_MODEL (0x0400) |
| #define UNDNAME_32_BIT_DECODE (0x0800) |
| #define UNDNAME_NAME_ONLY (0x1000) |
| #define UNDNAME_NO_ARGUMENTS (0x2000) |
| #define UNDNAME_NO_SPECIAL_SYMS (0x4000) |
| |
| BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD ModBase, ULONG TypeId, |
| IMAGEHLP_SYMBOL_TYPE_INFO GetType, PVOID); |
| typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo, |
| ULONG SymbolSize, PVOID UserContext); |
| BOOL WINAPI SymEnumTypes(HANDLE hProcess, DWORD BaseOfDll, |
| PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, |
| PVOID UserContext); |
| BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD addr, DWORD* displacement, |
| SYMBOL_INFO* sym_info); |
| BOOL WINAPI SymFromName(HANDLE hProcess, LPSTR Name, PSYMBOL_INFO Symbol); |
| BOOL WINAPI SymGetSymFromAddr(HANDLE,DWORD,PDWORD,PIMAGEHLP_SYMBOL); |
| BOOL WINAPI SymGetSymFromName(HANDLE,PSTR,PIMAGEHLP_SYMBOL); |
| BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, DWORD BaseOfDll, LPSTR Name, |
| PSYMBOL_INFO Symbol); |
| BOOL WINAPI SymGetSymNext(HANDLE,PIMAGEHLP_SYMBOL); |
| BOOL WINAPI SymGetSymPrev(HANDLE,PIMAGEHLP_SYMBOL); |
| BOOL WINAPI SymEnumSymbols(HANDLE hProcess, ULONG BaseOfDll, PCSTR Mask, |
| PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, |
| PVOID UserContext); |
| typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PSTR SymbolName, DWORD SymbolAddress, |
| ULONG SymbolSize, PVOID UserContext); |
| BOOL WINAPI SymEnumerateSymbols(HANDLE hProcess, DWORD BaseOfDll, |
| PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, |
| PVOID UserContext); |
| typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE hProcess, ULONG ActionCode, |
| PVOID CallbackData, PVOID UserContext); |
| BOOL WINAPI SymRegisterCallback(HANDLE hProcess, |
| PSYMBOL_REGISTERED_CALLBACK CallbackFunction, |
| PVOID UserContext); |
| BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL,PSTR,DWORD); |
| DWORD WINAPI UnDecorateSymbolName(LPCSTR DecoratedName, LPSTR UnDecoratedName, |
| DWORD UndecoratedLength, DWORD Flags); |
| |
| /************************* |
| * Source Files * |
| *************************/ |
| typedef BOOL (CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)(PSOURCEFILE pSourceFile, |
| PVOID UserContext); |
| |
| BOOL WINAPI SymEnumSourceFiles(HANDLE hProcess, ULONG ModBase, LPSTR Mask, |
| PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles, |
| PVOID UserContext); |
| BOOL WINAPI SymGetLineFromAddr(HANDLE hProcess, DWORD dwAddr, |
| PDWORD pdwDisplacement, PIMAGEHLP_LINE Line); |
| BOOL WINAPI SymGetLinePrev(HANDLE hProcess, PIMAGEHLP_LINE Line); |
| BOOL WINAPI SymGetLineNext(HANDLE hProcess, PIMAGEHLP_LINE Line); |
| |
| /************************* |
| * File & image handling * |
| *************************/ |
| BOOL WINAPI SymInitialize(HANDLE hProcess, PSTR UserSearchPath, BOOL fInvadeProcess); |
| BOOL WINAPI SymCleanup(HANDLE hProcess); |
| |
| HANDLE WINAPI FindDebugInfoFile(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath); |
| typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle, PSTR FileName, |
| PVOID CallerData); |
| HANDLE WINAPI FindDebugInfoFileEx(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath, |
| PFIND_DEBUG_FILE_CALLBACK Callback, PVOID CallerData); |
| typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PSTR filename, PVOID context); |
| |
| BOOL WINAPI SymFindFileInPath(HANDLE hProcess, LPSTR searchPath, LPSTR FileName, |
| PVOID id, DWORD two, DWORD three, DWORD flags, |
| LPSTR FilePath, PFINDFILEINPATHCALLBACK callback, |
| PVOID context); |
| HANDLE WINAPI FindExecutableImage(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath); |
| typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle, PSTR FileName, |
| PVOID CallerData); |
| HANDLE WINAPI FindExecutableImageEx(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath, |
| PFIND_EXE_FILE_CALLBACK Callback, PVOID CallerData); |
| PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID Base); |
| |
| PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID Base, BOOLEAN MappedAsImage, |
| USHORT DirectoryEntry, PULONG Size, |
| PIMAGE_SECTION_HEADER *FoundHeader); |
| PVOID WINAPI ImageDirectoryEntryToData(PVOID Base, BOOLEAN MappedAsImage, |
| USHORT DirectoryEntry, PULONG Size); |
| PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders, |
| PVOID Base, ULONG Rva); |
| PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders, PVOID Base, |
| ULONG Rva, OUT PIMAGE_SECTION_HEADER *LastRvaSection); |
| BOOL WINAPI SymGetSearchPath(HANDLE,PSTR,DWORD); |
| BOOL WINAPI SymSetSearchPath(HANDLE,PSTR); |
| DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE); |
| BOOL WINAPI MakeSureDirectoryPathExists(PCSTR); |
| BOOL WINAPI SearchTreeForFile(PSTR,PSTR,PSTR); |
| |
| /************************* |
| * Context management * |
| *************************/ |
| BOOL WINAPI SymSetContext(HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame, |
| PIMAGEHLP_CONTEXT Context); |
| |
| |
| /************************* |
| * Stack management * |
| *************************/ |
| |
| typedef struct _KDHELP |
| { |
| DWORD Thread; |
| DWORD ThCallbackStack; |
| DWORD NextCallback; |
| DWORD FramePointer; |
| DWORD KiCallUserMode; |
| DWORD KeUserCallbackDispatcher; |
| DWORD SystemRangeStart; |
| } KDHELP, *PKDHELP; |
| |
| typedef struct _STACKFRAME |
| { |
| ADDRESS AddrPC; |
| ADDRESS AddrReturn; |
| ADDRESS AddrFrame; |
| ADDRESS AddrStack; |
| PVOID FuncTableEntry; |
| DWORD Params[4]; |
| BOOL Far; |
| BOOL Virtual; |
| DWORD Reserved[3]; |
| KDHELP KdHelp; |
| } STACKFRAME, *LPSTACKFRAME; |
| |
| typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE) |
| (HANDLE hProcess, LPCVOID lpBaseAddress, PVOID lpBuffer, |
| DWORD nSize, PDWORD lpNumberOfBytesRead); |
| |
| typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE) |
| (HANDLE hProcess, DWORD AddrBase); |
| |
| typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE) |
| (HANDLE hProcess, DWORD ReturnAddress); |
| |
| typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE) |
| (HANDLE hProcess, HANDLE hThread, LPADDRESS lpaddr); |
| |
| BOOL WINAPI StackWalk(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); |
| |
| PVOID WINAPI SymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase); |
| |
| /************************* |
| * Version, global stuff * |
| *************************/ |
| |
| typedef struct API_VERSION |
| { |
| USHORT MajorVersion; |
| USHORT MinorVersion; |
| USHORT Revision; |
| USHORT Reserved; |
| } API_VERSION, *LPAPI_VERSION; |
| |
| LPAPI_VERSION WINAPI ImagehlpApiVersion(void); |
| LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION AppVersion); |
| |
| typedef struct _IMAGE_DEBUG_INFORMATION |
| { |
| LIST_ENTRY List; |
| DWORD ReservedSize; |
| PVOID ReservedMappedBase; |
| USHORT ReservedMachine; |
| USHORT ReservedCharacteristics; |
| DWORD ReservedCheckSum; |
| DWORD ImageBase; |
| DWORD SizeOfImage; |
| DWORD ReservedNumberOfSections; |
| PIMAGE_SECTION_HEADER ReservedSections; |
| DWORD ReservedExportedNamesSize; |
| PSTR ReservedExportedNames; |
| DWORD ReservedNumberOfFunctionTableEntries; |
| PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries; |
| DWORD ReservedLowestFunctionStartingAddress; |
| DWORD ReservedHighestFunctionEndingAddress; |
| DWORD ReservedNumberOfFpoTableEntries; |
| PFPO_DATA ReservedFpoTableEntries; |
| DWORD SizeOfCoffSymbols; |
| PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; |
| DWORD ReservedSizeOfCodeViewSymbols; |
| PVOID ReservedCodeViewSymbols; |
| PSTR ImageFilePath; |
| PSTR ImageFileName; |
| PSTR ReservedDebugFilePath; |
| DWORD ReservedTimeDateStamp; |
| BOOL ReservedRomImage; |
| PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory; |
| DWORD ReservedNumberOfDebugDirectories; |
| DWORD ReservedOriginalFunctionTableBaseAddress; |
| DWORD Reserved[ 2 ]; |
| } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION; |
| |
| |
| PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE FileHandle, PSTR FileName, |
| PSTR SymbolPath, DWORD ImageBase); |
| |
| BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo); |
| |
| DWORD WINAPI SymGetOptions(void); |
| DWORD WINAPI SymSetOptions(DWORD); |
| |
| #ifdef __cplusplus |
| } /* extern "C" */ |
| #endif /* defined(__cplusplus) */ |
| |
| #endif /* __WINE_DBGHELP_H */ |