1
0
Fork 0
x64dbg/x64_dbg_dbg/dbghelp_safe.cpp

159 lines
3.7 KiB
C++
Raw Normal View History

2015-03-28 10:28:06 +08:00
#include "_global.h"
#include "dbghelp_safe.h"
#include "threading.h"
DWORD
2015-04-05 09:49:09 +08:00
SafeUnDecorateSymbolName(
2015-03-28 10:28:06 +08:00
__in PCSTR name,
__out_ecount(maxStringLength) PSTR outputString,
__in DWORD maxStringLength,
__in DWORD flags
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-04-05 09:49:09 +08:00
// NOTE: Disabled because of potential recursive deadlocks
// EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return UnDecorateSymbolName(name, outputString, maxStringLength, flags);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymUnloadModule64(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in DWORD64 BaseOfDll
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymUnloadModule64(hProcess, BaseOfDll);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymSetSearchPath(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in_opt PCSTR SearchPath
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymSetSearchPath(hProcess, SearchPath);
}
DWORD
2015-04-05 09:49:09 +08:00
SafeSymSetOptions(
2015-03-28 10:28:06 +08:00
__in DWORD SymOptions
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymSetOptions(SymOptions);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymInitialize(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in_opt PCSTR UserSearchPath,
__in BOOL fInvadeProcess
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymInitialize(hProcess, UserSearchPath, fInvadeProcess);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymRegisterCallback64(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,
__in ULONG64 UserContext
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymRegisterCallback64(hProcess, CallbackFunction, UserContext);
}
DWORD64
2015-04-05 09:49:09 +08:00
SafeSymLoadModuleEx(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in_opt HANDLE hFile,
__in_opt PCSTR ImageName,
__in_opt PCSTR ModuleName,
__in DWORD64 BaseOfDll,
__in DWORD DllSize,
__in_opt PMODLOAD_DATA Data,
__in_opt DWORD Flags
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymLoadModuleEx(hProcess, hFile, ImageName, ModuleName, BaseOfDll, DllSize, Data, Flags);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymGetModuleInfo64(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in DWORD64 qwAddr,
__out PIMAGEHLP_MODULE64 ModuleInfo
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymGetModuleInfo64(hProcess, qwAddr, ModuleInfo);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymGetSearchPath(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__out_ecount(SearchPathLength) PSTR SearchPath,
__in DWORD SearchPathLength
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymGetSearchPath(hProcess, SearchPath, SearchPathLength);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymEnumSymbols(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in ULONG64 BaseOfDll,
__in_opt PCSTR Mask,
__in PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
__in_opt PVOID UserContext
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymEnumSymbols(hProcess, BaseOfDll, Mask, EnumSymbolsCallback, UserContext);
}
2015-03-29 03:24:28 +08:00
BOOL
2015-04-05 09:49:09 +08:00
SafeSymEnumerateModules64(
__in HANDLE hProcess,
__in PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,
__in_opt PVOID UserContext
)
2015-03-29 03:24:28 +08:00
{
2015-04-05 09:49:09 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
return SymEnumerateModules64(hProcess, EnumModulesCallback, UserContext);
2015-03-29 03:24:28 +08:00
}
2015-03-28 10:28:06 +08:00
BOOL
2015-04-05 09:49:09 +08:00
SafeSymGetLineFromAddr64(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in DWORD64 qwAddr,
__out PDWORD pdwDisplacement,
__out PIMAGEHLP_LINE64 Line64
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymGetLineFromAddr64(hProcess, qwAddr, pdwDisplacement, Line64);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymFromName(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in PCSTR Name,
__inout PSYMBOL_INFO Symbol
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymFromName(hProcess, Name, Symbol);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymFromAddr(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess,
__in DWORD64 Address,
__out_opt PDWORD64 Displacement,
__inout PSYMBOL_INFO Symbol
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymFromAddr(hProcess, Address, Displacement, Symbol);
}
BOOL
2015-04-05 09:49:09 +08:00
SafeSymCleanup(
2015-03-28 10:28:06 +08:00
__in HANDLE hProcess
2015-04-05 09:49:09 +08:00
)
2015-03-28 10:28:06 +08:00
{
2015-03-29 03:24:28 +08:00
EXCLUSIVE_ACQUIRE(LockSym);
2015-03-28 10:28:06 +08:00
return SymCleanup(hProcess);
}