184 lines
4.7 KiB
C
184 lines
4.7 KiB
C
//----------------------------------------------------------------------------
|
|
//
|
|
// General utility functions.
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1997-2001.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef _UTIL_H_
|
|
#define _UTIL_H_
|
|
|
|
extern PCSTR g_DefaultLogFileName;
|
|
extern char g_OpenLogFileName[];
|
|
extern BOOL g_OpenLogFileAppended;
|
|
extern int g_LogFile;
|
|
extern BOOL g_DisableErrorPrint;
|
|
|
|
ULONG CheckUserInterrupt(void);
|
|
|
|
LONG MappingExceptionFilter(struct _EXCEPTION_POINTERS *ExceptionInfo);
|
|
|
|
void RemoveDelChar(PSTR pBuffer);
|
|
|
|
ULONGLONG HexValue(ULONG);
|
|
|
|
void HexList(PUCHAR, ULONG *, ULONG);
|
|
void AsciiList(PSTR, ULONG *);
|
|
|
|
#define STRV_SPACE_IS_SEPARATOR 0x00000001
|
|
#define STRV_TRIM_TRAILING_SPACE 0x00000002
|
|
#define STRV_ALLOW_ESCAPED_CHARACTERS 0x00000004
|
|
#define STRV_COMPRESS_ESCAPED_CHARACTERS 0x00000008
|
|
|
|
#define STRV_ESCAPED_CHARACTERS \
|
|
(STRV_ALLOW_ESCAPED_CHARACTERS | STRV_COMPRESS_ESCAPED_CHARACTERS)
|
|
|
|
PSTR BufferStringValue(PSTR* Buf, ULONG Flags, PCHAR Save);
|
|
PSTR StringValue(ULONG Flags, PCHAR Save);
|
|
void CompressEscapes(PSTR Str);
|
|
|
|
void DECLSPEC_NORETURN ReportError(ULONG Code, PCSTR* Desc);
|
|
#define error(Code) ReportError(Code, NULL)
|
|
|
|
void OpenLogFile(PCSTR File, BOOL Append);
|
|
void fnLogOpen(BOOL Append);
|
|
void fnLogClose(void);
|
|
void lprintf(PCSTR Str);
|
|
|
|
PSTR PrepareImagePath(PSTR ImagePath);
|
|
|
|
CHAR* AddImage(PMODULE_INFO_ENTRY ModEntry, BOOL ForceSymbolLoad);
|
|
|
|
void
|
|
DelImage(
|
|
PPROCESS_INFO pProcess,
|
|
PDEBUG_IMAGE_INFO pImage
|
|
);
|
|
|
|
BOOL DelImageByName(PPROCESS_INFO Process, PCSTR Name, INAME Which);
|
|
BOOL DelImageByBase(PPROCESS_INFO pProcess, ULONG64 Base);
|
|
void DelImages(PPROCESS_INFO Process);
|
|
|
|
#define SYMADDR_FORCE 0x00000001
|
|
#define SYMADDR_LABEL 0x00000002
|
|
#define SYMADDR_SOURCE 0x00000004
|
|
|
|
void
|
|
OutputSymAddr(
|
|
ULONG64 Offset,
|
|
ULONG Flags
|
|
);
|
|
|
|
void
|
|
OutputLineAddr(
|
|
ULONG64 Offset,
|
|
PCSTR Format
|
|
);
|
|
|
|
LPSTR
|
|
FormatMachineAddr64(
|
|
MachineInfo* Machine,
|
|
ULONG64 Addr
|
|
);
|
|
#define FormatAddr64(Addr) FormatMachineAddr64(g_TargetMachine, Addr)
|
|
|
|
LPSTR
|
|
FormatDisp64(
|
|
ULONG64 addr
|
|
);
|
|
|
|
//
|
|
// Output that can be displayed about the current register set.
|
|
//
|
|
|
|
void OutCurInfo(ULONG Flags, ULONG AllMask, ULONG RegMask);
|
|
|
|
// Items displayed if the flag is given.
|
|
|
|
// Display symbol nearest PC.
|
|
#define OCI_SYMBOL 0x00000001
|
|
// Display disassembly at PC.
|
|
#define OCI_DISASM 0x00000002
|
|
|
|
// Items which may be displayed if the flag is given. Other global
|
|
// settings ultimately control whether information is displayed or not;
|
|
// these flags indicate whether such output is allowed or not. Each
|
|
// of these flags also has a FORCE bit to force display regardless of
|
|
// the global settings.
|
|
|
|
// Allow registers to be displayed.
|
|
#define OCI_ALLOW_REG 0x00000004
|
|
// Allow display of source code and/or source line.
|
|
#define OCI_ALLOW_SOURCE 0x00000008
|
|
// Allow EA memory to be displayed during disasm.
|
|
#define OCI_ALLOW_EA 0x00000010
|
|
|
|
// Force all output to be shown regardless of global settings.
|
|
#define OCI_FORCE_ALL 0x80000000
|
|
// Force display of registers.
|
|
#define OCI_FORCE_REG 0x40000000
|
|
// Force source output.
|
|
#define OCI_FORCE_SOURCE 0x20000000
|
|
// Force display of EA memory during disasm.
|
|
#define OCI_FORCE_EA 0x10000000
|
|
// Don't check for running state.
|
|
#define OCI_IGNORE_STATE 0x08000000
|
|
|
|
|
|
BOOL
|
|
__inline
|
|
ConvertQwordsToDwords(
|
|
PULONG64 Qwords,
|
|
PULONG Dwords,
|
|
ULONG Count
|
|
)
|
|
{
|
|
BOOL rval = TRUE;
|
|
while (Count--) {
|
|
rval = rval && (*Qwords >> 32) == 0;
|
|
*Dwords++ = (ULONG)*Qwords++;
|
|
}
|
|
return rval;
|
|
}
|
|
|
|
DWORD
|
|
NetworkPathCheck(
|
|
LPCSTR PathList
|
|
);
|
|
|
|
#define ALL_ID_LIST 0xffffffff
|
|
|
|
ULONG GetIdList (void);
|
|
HRESULT ChangePath(PSTR* Path, PCSTR New, BOOL Append, ULONG SymNotify);
|
|
PSTR FindPathElement(PSTR Path, ULONG Element, PSTR* EltEnd);
|
|
void CheckPath(PCSTR Path);
|
|
HRESULT ChangeString(PSTR* Str, PULONG StrLen, PCSTR New);
|
|
|
|
BOOL LoadExecutableImageMemory(PDEBUG_IMAGE_INFO Image);
|
|
BOOL UnloadExecutableImageMemory(PDEBUG_IMAGE_INFO Image);
|
|
|
|
void
|
|
ExceptionRecordTo64(PEXCEPTION_RECORD Rec,
|
|
PEXCEPTION_RECORD64 Rec64);
|
|
void
|
|
ExceptionRecord64To(PEXCEPTION_RECORD64 Rec64,
|
|
PEXCEPTION_RECORD Rec);
|
|
void
|
|
MemoryBasicInformationTo64(PMEMORY_BASIC_INFORMATION Mbi,
|
|
PMEMORY_BASIC_INFORMATION64 Mbi64);
|
|
void
|
|
MemoryBasicInformation32To64(PMEMORY_BASIC_INFORMATION32 Mbi32,
|
|
PMEMORY_BASIC_INFORMATION64 Mbi64);
|
|
void
|
|
DebugEvent32To64(LPDEBUG_EVENT32 Event32,
|
|
LPDEBUG_EVENT64 Event64);
|
|
|
|
LPSTR
|
|
TimeToStr(ULONG TimeDateStamp);
|
|
|
|
PCSTR PathTail(PCSTR Path);
|
|
BOOL MatchPathTails(PCSTR Path1, PCSTR Path2);
|
|
|
|
#endif // #ifndef _UTIL_H_
|