print_register("csgsfs", ZBX_LSHIFT(pctx->SegCs, 24) | ZBX_LSHIFT(pctx->SegGs, 16) | ZBX_LSHIFT(pctx->SegFs, 8));
#pragma comment(lib, "DbgHelp.lib")
typedef BOOL (WINAPI *SymGetLineFromAddrW64_func_t)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64);
typedef BOOL (WINAPI *SymFromAddr_func_t)(HANDLE a, DWORD64 b , PDWORD64 c, PSYMBOL_INFO d);
static void print_register(const char *name, unsigned __int64 value)
zabbix_log(LOG_LEVEL_CRIT, "%-7s = %16I64x = %20I64u = %20I64d", name, value, value, value);
static void print_register(const char *name, unsigned __int32 value)
zabbix_log(LOG_LEVEL_CRIT, "%-7s = %16lx = %20lu = %20ld", name, value, value, value);
static void print_fatal_info(CONTEXT *pctx)
zabbix_log(LOG_LEVEL_CRIT, "====== Fatal information: ======");
zabbix_log(LOG_LEVEL_CRIT, "Program counter: 0x%08lx", pctx->Rip);
zabbix_log(LOG_LEVEL_CRIT, "Program counter: 0x%04x", pctx->Eip);
zabbix_log(LOG_LEVEL_CRIT, "=== Registers: ===");
#define ZBX_LSHIFT(value, bits) (((unsigned __int64)value) << bits)
print_register("r8", pctx->R8);
print_register("r9", pctx->R9);
print_register("r10", pctx->R10);
print_register("r11", pctx->R11);
print_register("r12", pctx->R12);
print_register("r13", pctx->R13);
print_register("r14", pctx->R14);
print_register("r15", pctx->R15);
print_register("rdi", pctx->Rdi);