//---------------------------------------------------------------------------- // // Symbol-handling routines. // // Copyright (C) Microsoft Corporation, 1997-2001. // //---------------------------------------------------------------------------- #ifndef _NTSYM_H_ #define _NTSYM_H_ #define SYM_BUFFER_SIZE (sizeof(IMAGEHLP_SYMBOL64) + MAX_SYMBOL_LEN) #define MatchPattern(Str, Pat) \ SymMatchString(Str, Pat, FALSE) extern DEBUG_STACK_FRAME g_LastRegFrame; // The scope buffer is only exposed so that it // can be looked at without requiring a function call. // Users of scope information should go through the // scope abstraction functions. extern DEBUG_SCOPE g_ScopeBuffer; extern LPSTR g_SymbolSearchPath; extern LPSTR g_ExecutableImageSearchPath; extern ULONG g_SymOptions; extern PIMAGEHLP_SYMBOL64 g_Sym; extern PIMAGEHLP_SYMBOL64 g_SymStart; extern ULONG g_NumUnloadedModules; void RefreshAllModules(void); void SetSymOptions(ULONG Options); BOOL IsImageMachineType64(DWORD MachineType); void CreateModuleNameFromPath( LPSTR szImagePath, LPSTR szModuleName ); void fnListNear ( ULONG64 addrStart ); BOOL GetHeaderInfo( IN ULONG64 BaseOfDll, OUT LPDWORD CheckSum, OUT LPDWORD TimeDateStamp, OUT LPDWORD SizeOfImage ); void GetSymbolStdCall ( ULONG64 Offset, PCHAR Buffer, ULONG BufferLen, PULONG64 Displacement, PUSHORT StdCallParams ); BOOL GetNearSymbol( ULONG64 Offset, PSTR Buffer, ULONG BufferLen, PULONG64 Disp, LONG Delta ); BOOL ValidatePathComponent(PCSTR Part); void SetSymbolSearchPath(PPROCESS_INFO Process); void DeferSymbolLoad(PDEBUG_IMAGE_INFO); void LoadSymbols(PDEBUG_IMAGE_INFO); void UnloadSymbols(PDEBUG_IMAGE_INFO); BOOL IgnoreEnumeratedSymbol(class MachineInfo* Machine, PSYMBOL_INFO SymInfo); PCSTR PrependPrefixToSymbol( char PrefixedString[], PCSTR pString, PCSTR *RegString ); ULONG GetOffsetFromSym( PCSTR String, PULONG64 Offset, PDEBUG_IMAGE_INFO* Image ); void GetAdjacentSymOffsets( ULONG64 addrStart, PULONG64 prevOffset, PULONG64 nextOffset ); void GetCurrentMemoryOffsets ( PULONG64 pMemoryLow, PULONG64 pMemoryHigh ); PDEBUG_IMAGE_INFO GetImageByIndex(PPROCESS_INFO Process, ULONG Index); PDEBUG_IMAGE_INFO GetImageByOffset(PPROCESS_INFO Process, ULONG64 Offset); PDEBUG_IMAGE_INFO GetImageByName(PPROCESS_INFO Process, PCSTR Name, INAME Which); BOOL GetModnameFromImage( ULONG64 BaseOfDll, HANDLE File, LPSTR Name, ULONG NameSize ); typedef enum _DMT_FLAGS { DMT_SYM_IMAGE_FILE_NAME = 0x0000, DMT_ONLY_LOADED_SYMBOLS = 0x0001, DMT_ONLY_USER_SYMBOLS = 0x0002, DMT_ONLY_KERNEL_SYMBOLS = 0x0004, DMT_VERBOSE = 0x0008, DMT_SYM_FILE_NAME = 0x0010, DMT_MAPPED_IMAGE_NAME = 0x0020, DMT_IMAGE_PATH_NAME = 0x0040, DMT_IMAGE_TIMESTAMP = 0x0080, DMT_NO_SYMBOL_OUTPUT = 0x0100, } DMT_FLAGS; #define DMT_STANDARD DMT_SYM_FILE_NAME #define DMT_NAME_FLAGS \ (DMT_SYM_IMAGE_FILE_NAME | DMT_SYM_FILE_NAME | DMT_MAPPED_IMAGE_NAME | \ DMT_IMAGE_PATH_NAME) enum { DMT_NAME_SYM_IMAGE, DMT_NAME_SYM_FILE, DMT_NAME_MAPPED_IMAGE, DMT_NAME_IMAGE_PATH, DMT_NAME_COUNT }; void DumpModuleTable( ULONG DMT_Flags, PSTR Pattern ); void ParseDumpModuleTable(void); void ParseExamine(void); BOOL SymbolCallbackFunction( HANDLE hProcess, ULONG ActionCode, ULONG64 CallbackData, ULONG64 UserContext ); BOOL TranslateAddress( IN ULONG Flags, IN ULONG RegId, IN OUT PULONG64 Address, OUT PULONG64 Value ); BOOL SetCurrentScope(IN PDEBUG_STACK_FRAME ScopeFrame, IN OPTIONAL PVOID ScopeContext, IN ULONG ScopeContextSize); BOOL ResetCurrentScope(void); BOOL ResetCurrentScopeLazy(void); inline PDEBUG_SCOPE GetCurrentScope(void) { if (g_ScopeBuffer.State == ScopeDefaultLazy) { ResetCurrentScope(); } return &g_ScopeBuffer; } inline PCROSS_PLATFORM_CONTEXT GetCurrentScopeContext(void) { if (g_ScopeBuffer.State == ScopeFromContext) { return &g_ScopeBuffer.Context; } else { return NULL; } } // Force lazy scope to be updated so that actual // scope data is available. #define RequireCurrentScope() \ GetCurrentScope() inline void PushScope(PDEBUG_SCOPE Buffer) { *Buffer = g_ScopeBuffer; } inline void PopScope(PDEBUG_SCOPE Buffer) { g_ScopeBuffer = *Buffer; } #define LUM_OUTPUT 0x0001 #define LUM_OUTPUT_VERBOSE 0x0002 #define LUM_OUTPUT_TERSE 0x0004 #define LUM_OUTPUT_TIMESTAMP 0x0008 void ListUnloadedModules(ULONG Flags, PSTR Pattern); ULONG ModuleMachineType(PPROCESS_INFO Process, ULONG64 Offset); enum { FSC_NONE, FSC_FOUND, }; ULONG IsInFastSyscall(ULONG64 Addr, PULONG64 Base); BOOL ShowFunctionParameters(PDEBUG_STACK_FRAME StackFrame, PSTR SymBuf, ULONG64 Displacement); #endif // #ifndef _NTSYM_H_