📄 imagehlp.pas
字号:
PSymEnumsymbolsCallback64 = PSYM_ENUMSYMBOLS_CALLBACK64;
PSYM_ENUMSYMBOLS_CALLBACK64W = function (SymbolName: PWSTR;
SymbolAddress: DWORD64; SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
{$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK64W}
PSymEnumsymbolsCallback64w = PSYM_ENUMSYMBOLS_CALLBACK64W;
PENUMLOADED_MODULES_CALLBACK64 = function (ModuleName: PSTR;
ModuleBase: DWORD64; ModuleSize: ULONG; UserContext: PVOID): BOOL; stdcall;
{$EXTERNALSYM PENUMLOADED_MODULES_CALLBACK64}
PSnumloadedModulesCallback64 = PENUMLOADED_MODULES_CALLBACK64;
PSYMBOL_REGISTERED_CALLBACK64 = function (hProcess: HANDLE; ActionCode: ULONG;
CallbackData: ULONG64; UserContext: ULONG64): BOOL; stdcall;
{$EXTERNALSYM PSYMBOL_REGISTERED_CALLBACK64}
PSymbolRegisteredCallback64 = PSYMBOL_REGISTERED_CALLBACK64;
PSYMBOL_FUNCENTRY_CALLBACK = function (hProcess: HANDLE; AddrBase: DWORD;
UserContext: PVOID): PVOID; stdcall;
{$EXTERNALSYM PSYMBOL_FUNCENTRY_CALLBACK}
PSymbolFuncentryCallback = PSYMBOL_FUNCENTRY_CALLBACK;
PSYMBOL_FUNCENTRY_CALLBACK64 = function (hProcess: HANDLE; AddrBase: ULONG64;
UserContext: ULONG64): PVOID; stdcall;
{$EXTERNALSYM PSYMBOL_FUNCENTRY_CALLBACK64}
PSymbolFuncentryCallback64 = PSYMBOL_FUNCENTRY_CALLBACK64;
PSYM_ENUMMODULES_CALLBACK = function (ModuleName: PSTR; BaseOfDll: ULONG;
UserContext: PVOID): BOOL; stdcall;
{$EXTERNALSYM PSYM_ENUMMODULES_CALLBACK}
PSymEnummodulesCallback = PSYM_ENUMMODULES_CALLBACK;
PSYM_ENUMSYMBOLS_CALLBACK = function (SymbolName: PSTR; SymbolAddress: ULONG;
SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
{$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACK}
PSymEnumsymbolsCallback = PSYM_ENUMSYMBOLS_CALLBACK;
PSYM_ENUMSYMBOLS_CALLBACKW = function (SymbolName: PWSTR; SymbolAddress: ULONG;
SymbolSize: ULONG; UserContext: PVOID): BOOL; stdcall;
{$EXTERNALSYM PSYM_ENUMSYMBOLS_CALLBACKW}
PSymEnumsymbolsCallbackw = PSYM_ENUMSYMBOLS_CALLBACKW;
PENUMLOADED_MODULES_CALLBACK = function (ModuleName: PSTR; ModuleBase: ULONG;
ModuleSize: ULONG; UserContext: PVOID): BOOL; stdcall;
{$EXTERNALSYM PENUMLOADED_MODULES_CALLBACK}
PEnumloadedModulesCallback = PENUMLOADED_MODULES_CALLBACK;
PSYMBOL_REGISTERED_CALLBACK = function (hProcess: HANDLE; ActionCode: ULONG;
CallbackData: PVOID; UserContext: PVOID): BOOL; stdcall;
{$EXTERNALSYM PSYMBOL_REGISTERED_CALLBACK}
PSymbolRegisteredCallback = PSYMBOL_REGISTERED_CALLBACK;
//
// symbol flags
//
const
SYMF_OMAP_GENERATED = $00000001;
{$EXTERNALSYM SYMF_OMAP_GENERATED}
SYMF_OMAP_MODIFIED = $00000002;
{$EXTERNALSYM SYMF_OMAP_MODIFIED}
//
// symbol type enumeration
//
type
SYM_TYPE = (
SymNone,
SymCoff,
SymCv,
SymPdb,
SymExport,
SymDeferred,
SymSym); // .sym file
{$EXTERNALSYM SYM_TYPE}
TSymType = SYM_TYPE;
//
// symbol data structure
//
PIMAGEHLP_SYMBOL64 = ^IMAGEHLP_SYMBOL64;
{$EXTERNALSYM PIMAGEHLP_SYMBOL64}
_IMAGEHLP_SYMBOL64 = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_SYMBOL64)
Address: DWORD64; // virtual address including dll base address
Size: DWORD; // estimated size of symbol, can be zero
Flags: DWORD; // info about the symbols, see the SYMF defines
MaxNameLength: DWORD; // maximum size of symbol name in 'Name'
Name: array [0..0] of CHAR; // symbol name (null terminated string)
end;
{$EXTERNALSYM _IMAGEHLP_SYMBOL64}
IMAGEHLP_SYMBOL64 = _IMAGEHLP_SYMBOL64;
{$EXTERNALSYM IMAGEHLP_SYMBOL64}
TImageHlpSymbol64 = IMAGEHLP_SYMBOL64;
PImageHlpSymbol64 = PIMAGEHLP_SYMBOL64;
PIMAGEHLP_SYMBOL = ^IMAGEHLP_SYMBOL;
{$EXTERNALSYM PIMAGEHLP_SYMBOL}
_IMAGEHLP_SYMBOL = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_SYMBOL)
Address: DWORD; // virtual address including dll base address
Size: DWORD; // estimated size of symbol, can be zero
Flags: DWORD; // info about the symbols, see the SYMF defines
MaxNameLength: DWORD; // maximum size of symbol name in 'Name'
Name: array [0..0] of CHAR; // symbol name (null terminated string)
end;
{$EXTERNALSYM _IMAGEHLP_SYMBOL}
IMAGEHLP_SYMBOL = _IMAGEHLP_SYMBOL;
{$EXTERNALSYM IMAGEHLP_SYMBOL}
TImageHlpSymbol = IMAGEHLP_SYMBOL;
PImageHlpSymbol = PIMAGEHLP_SYMBOL;
//
// module data structure
//
PIMAGEHLP_MODULE64 = ^IMAGEHLP_MODULE64;
{$EXTERNALSYM PIMAGEHLP_MODULE64}
_IMAGEHLP_MODULE64 = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE64)
BaseOfImage: DWORD64; // base load address of module
ImageSize: DWORD; // virtual size of the loaded module
TimeDateStamp: DWORD; // date/time stamp from pe header
CheckSum: DWORD; // checksum from the pe header
NumSyms: DWORD; // number of symbols in the symbol table
SymType: SYM_TYPE; // type of symbols loaded
ModuleName: array [0..3] of CHAR; // module name
ImageName: array [0..255] of CHAR; // image name
LoadedImageName: array [0..255] of CHAR; // symbol file name
end;
{$EXTERNALSYM _IMAGEHLP_MODULE64}
IMAGEHLP_MODULE64 = _IMAGEHLP_MODULE64;
{$EXTERNALSYM IMAGEHLP_MODULE64}
TImageHlpModule64 = IMAGEHLP_MODULE64;
PImageHlpModule64 = PIMAGEHLP_MODULE64;
PIMAGEHLP_MODULEW64 = ^IMAGEHLP_MODULEW64;
{$EXTERNALSYM PIMAGEHLP_MODULEW64}
_IMAGEHLP_MODULE64W = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE64)
BaseOfImage: DWORD64; // base load address of module
ImageSize: DWORD; // virtual size of the loaded module
TimeDateStamp: DWORD; // date/time stamp from pe header
CheckSum: DWORD; // checksum from the pe header
NumSyms: DWORD; // number of symbols in the symbol table
SymType: SYM_TYPE; // type of symbols loaded
ModuleName: array [0..31] of WCHAR; // module name
ImageName: array [0..255] of WCHAR; // image name
LoadedImageName: array [0..255] of WCHAR; // symbol file name
end;
{$EXTERNALSYM _IMAGEHLP_MODULE64W}
IMAGEHLP_MODULEW64 = _IMAGEHLP_MODULE64W;
{$EXTERNALSYM IMAGEHLP_MODULEW64}
TImageHlpModuleW64 = IMAGEHLP_MODULEW64;
PImageHlpModuleW64 = PIMAGEHLP_MODULEW64;
PIMAGEHLP_MODULE = ^IMAGEHLP_MODULE;
{$EXTERNALSYM PIMAGEHLP_MODULE}
_IMAGEHLP_MODULE = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE)
BaseOfImage: DWORD; // base load address of module
ImageSize: DWORD; // virtual size of the loaded module
TimeDateStamp: DWORD; // date/time stamp from pe header
CheckSum: DWORD; // checksum from the pe header
NumSyms: DWORD; // number of symbols in the symbol table
SymType: SYM_TYPE; // type of symbols loaded
ModuleName: array [0..31] of CHAR; // module name
ImageName: array [0..255] of CHAR; // image name
LoadedImageName: array [0..255] of CHAR; // symbol file name
end;
{$EXTERNALSYM _IMAGEHLP_MODULE}
IMAGEHLP_MODULE = _IMAGEHLP_MODULE;
{$EXTERNALSYM IMAGEHLP_MODULE}
TImageHlpModule = IMAGEHLP_MODULE;
PImageHlpModule = PIMAGEHLP_MODULE;
PIMAGEHLP_MODULEW = ^IMAGEHLP_MODULEW;
{$EXTERNALSYM PIMAGEHLP_MODULEW}
_IMAGEHLP_MODULEW = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_MODULE)
BaseOfImage: DWORD; // base load address of module
ImageSize: DWORD; // virtual size of the loaded module
TimeDateStamp: DWORD; // date/time stamp from pe header
CheckSum: DWORD; // checksum from the pe header
NumSyms: DWORD; // number of symbols in the symbol table
SymType: SYM_TYPE; // type of symbols loaded
ModuleName: array [0..31] of WCHAR; // module name
ImageName: array [0..255] of WCHAR; // image name
LoadedImageName: array [0..255] of WCHAR; // symbol file name
end;
{$EXTERNALSYM _IMAGEHLP_MODULEW}
IMAGEHLP_MODULEW = _IMAGEHLP_MODULEW;
{$EXTERNALSYM IMAGEHLP_MODULEW}
TImageHlpModuleW = IMAGEHLP_MODULEW;
PImageHlpModuleW = PIMAGEHLP_MODULEW;
//
// source file line data structure
//
PIMAGEHLP_LINE64 = ^IMAGEHLP_LINE64;
{$EXTERNALSYM PIMAGEHLP_LINE64}
_IMAGEHLP_LINE64 = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE64)
Key: PVOID; // internal
LineNumber: DWORD; // line number in file
FileName: PCHAR; // full filename
Address: DWORD64; // first instruction of line
end;
{$EXTERNALSYM _IMAGEHLP_LINE64}
IMAGEHLP_LINE64 = _IMAGEHLP_LINE64;
{$EXTERNALSYM IMAGEHLP_LINE64}
TImageHlpLine64 = IMAGEHLP_LINE64;
PImageHlpLine64 = PIMAGEHLP_LINE64;
PIMAGEHLP_LINE = ^IMAGEHLP_LINE;
{$EXTERNALSYM PIMAGEHLP_LINE}
_IMAGEHLP_LINE = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE)
Key: PVOID; // internal
LineNumber: DWORD; // line number in file
FileName: PCHAR; // full filename
Address: DWORD; // first instruction of line
end;
{$EXTERNALSYM _IMAGEHLP_LINE}
IMAGEHLP_LINE = _IMAGEHLP_LINE;
{$EXTERNALSYM IMAGEHLP_LINE}
TImageHlpLine = IMAGEHLP_LINE;
PImageHlpLine = PIMAGEHLP_LINE;
//
// data structures used for registered symbol callbacks
//
const
CBA_DEFERRED_SYMBOL_LOAD_START = $00000001;
{$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_START}
CBA_DEFERRED_SYMBOL_LOAD_COMPLETE = $00000002;
{$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_COMPLETE}
CBA_DEFERRED_SYMBOL_LOAD_FAILURE = $00000003;
{$EXTERNALSYM CBA_DEFERRED_SYMBOL_LOAD_FAILURE}
CBA_SYMBOLS_UNLOADED = $00000004;
{$EXTERNALSYM CBA_SYMBOLS_UNLOADED}
CBA_DUPLICATE_SYMBOL = $00000005;
{$EXTERNALSYM CBA_DUPLICATE_SYMBOL}
CBA_READ_MEMORY = $00000006;
{$EXTERNALSYM CBA_READ_MEMORY}
CBA_DEBUG_INFO = $10000000;
{$EXTERNALSYM CBA_DEBUG_INFO}
type
PIMAGEHLP_CBA_READ_MEMORY = ^IMAGEHLP_CBA_READ_MEMORY;
{$EXTERNALSYM PIMAGEHLP_CBA_READ_MEMORY}
_IMAGEHLP_CBA_READ_MEMORY = record
addr: DWORD64; // address to read from
buf: PVOID; // buffer to read to
bytes: DWORD; // amount of bytes to read
bytesread: LPDWORD; // pointer to store amount of bytes read
end;
{$EXTERNALSYM _IMAGEHLP_CBA_READ_MEMORY}
IMAGEHLP_CBA_READ_MEMORY = _IMAGEHLP_CBA_READ_MEMORY;
{$EXTERNALSYM IMAGEHLP_CBA_READ_MEMORY}
TImageHlpCbaReadMemory = IMAGEHLP_CBA_READ_MEMORY;
PImageHlpCbaReadMemory = PIMAGEHLP_CBA_READ_MEMORY;
PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = ^IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
{$EXTERNALSYM PIMAGEHLP_DEFERRED_SYMBOL_LOAD64}
_IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD64)
BaseOfImage: DWORD64; // base load address of module
CheckSum: DWORD; // checksum from the pe header
TimeDateStamp: DWORD; // date/time stamp from pe header
FileName: array [0..MAX_PATH - 1] of CHAR; // symbols file or image name
Reparse: ByteBool; // load failure reparse
end;
{$EXTERNALSYM _IMAGEHLP_DEFERRED_SYMBOL_LOAD64}
IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = _IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
{$EXTERNALSYM IMAGEHLP_DEFERRED_SYMBOL_LOAD64}
TImageHlpDeferredSymbolLoad64 = IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
PImageHlpDeferredSymbolLoad64 = PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
PIMAGEHLP_DEFERRED_SYMBOL_LOAD = ^IMAGEHLP_DEFERRED_SYMBOL_LOAD;
{$EXTERNALSYM PIMAGEHLP_DEFERRED_SYMBOL_LOAD}
_IMAGEHLP_DEFERRED_SYMBOL_LOAD = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD)
BaseOfImage: DWORD; // base load address of module
CheckSum: DWORD; // checksum from the pe header
TimeDateStamp: DWORD; // date/time stamp from pe header
FileName: array [0..MAX_PATH - 1] of CHAR; // symbols file or image name
Reparse: ByteBool; // load failure reparse
end;
{$EXTERNALSYM _IMAGEHLP_DEFERRED_SYMBOL_LOAD}
IMAGEHLP_DEFERRED_SYMBOL_LOAD = _IMAGEHLP_DEFERRED_SYMBOL_LOAD;
{$EXTERNALSYM IMAGEHLP_DEFERRED_SYMBOL_LOAD}
TImageHlpDeferredSymbolLoad = IMAGEHLP_DEFERRED_SYMBOL_LOAD;
PImageHlpDeferredSymbolLoad = PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
PIMAGEHLP_DUPLICATE_SYMBOL64 = ^IMAGEHLP_DUPLICATE_SYMBOL64;
{$EXTERNALSYM PIMAGEHLP_DUPLICATE_SYMBOL64}
_IMAGEHLP_DUPLICATE_SYMBOL64 = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL64)
NumberOfDups: DWORD; // number of duplicates in the Symbol array
Symbol: PIMAGEHLP_SYMBOL64; // array of duplicate symbols
SelectedSymbol: DWORD; // symbol selected (-1 to start)
end;
{$EXTERNALSYM _IMAGEHLP_DUPLICATE_SYMBOL64}
IMAGEHLP_DUPLICATE_SYMBOL64 = _IMAGEHLP_DUPLICATE_SYMBOL64;
{$EXTERNALSYM IMAGEHLP_DUPLICATE_SYMBOL64}
TImageHlpDuplicateSymbol64 = IMAGEHLP_DUPLICATE_SYMBOL64;
PImageHlpDuplicateSymbol64 = PIMAGEHLP_DUPLICATE_SYMBOL64;
PIMAGEHLP_DUPLICATE_SYMBOL = ^IMAGEHLP_DUPLICATE_SYMBOL;
{$EXTERNALSYM PIMAGEHLP_DUPLICATE_SYMBOL}
_IMAGEHLP_DUPLICATE_SYMBOL = record
SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL)
NumberOfDups: DWORD; // number of duplicates in the Symbol array
Symbol: PIMAGEHLP_SYMBOL; // array of duplicate symbols
SelectedSymbol: DWORD; // symbol selected (-1 to start)
end;
{$EXTERNALSYM _IMAGEHLP_DUPLICATE_SYMBOL}
IMAGEHLP_DUPLICATE_SYMBOL = _IMAGEHLP_DUPLICATE_SYMBOL;
{$EXTERNALSYM IMAGEHLP_DUPLICATE_SYMBOL}
TImageHlpDuplicateSymbol = IMAGEHLP_DUPLICATE_SYMBOL;
PImageHlpDuplicateSymbol = PIMAGEHLP_DUPLICATE_SYMBOL;
//
// options that are set/returned by SymSetOptions() & SymGetOptions()
// these are used as a mask
//
const
SYMOPT_CASE_INSENSITIVE = $00000001;
{$EXTERNALSYM SYMOPT_CASE_INSENSITIVE}
SYMOPT_UNDNAME = $00000002;
{$EXTERNALSYM SYMOPT_UNDNAME}
SYMOPT_DEFERRED_LOADS = $00000004;
{$EXTERNALSYM SYMOPT_DEFERRED_LOADS}
SYMOPT_NO_CPP = $00000008;
{$EXTERNALSYM SYMOPT_NO_CPP}
SYMOPT_LOAD_LINES = $00000010;
{$EXTERNALSYM SYMOPT_LOAD_LINES}
SYMOPT_OMAP_FIND_NEAREST = $00000020;
{$EXTERNALSYM SYMOPT_OMAP_FIND_NEAREST}
SYMOPT_DEBUG = DWORD($80000000);
{$EXTERNALSYM SYMOPT_DEBUG}
function SymSetOptions(SymOptions: DWORD): DWORD; stdcall;
{$EXTERNALSYM SymSetOptions}
function SymGetOptions: DWORD; stdcall;
{$EXTERNALSYM SymGetOptions}
function SymCleanup(hProcess: HANDLE): BOOL; stdcall;
{$EXTERNALSYM SymCleanup}
function SymEnumerateModules64(hProcess: HANDLE; EnumModulesCallback: PSYM_ENUMMODULES_CALLBACK64;
UserContext: PVOID): BOOL; stdcall;
{$EXTERNALSYM SymEnumerateModules64}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -