【发布时间】:2023-03-24 21:42:01
【问题描述】:
您如何获得SEH 异常的名称和/或描述,而无需将字符串硬编码到您的应用程序中?
我尝试使用FormatMessage(),但有时它会截断消息,即使您指定忽略插入:
__asm { // raise access violation
xor eax, eax
mov eax, [eax]
}
使用代码0xC0000005 (EXCEPTION_ACCESS_VIOLATION) 引发异常。
char msg[256];
FormatMessageA(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS,
GetModuleHandleA("ntdll.dll"), 0xC0000005,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msg, sizeof(msg), NULL);
用截断的字符串填充msg:“The instruction at 0x”。
【问题讨论】:
-
哇,这确实看起来很糟糕。它适用于各种消息,但我无法让它在我的一生中为 STATUS_ACCESS_VIOLATION 工作。
-
我现在对此有点生疏了,但是您尝试过 FORMAT_MESSAGE_FROM_SYSTEM 吗?
-
morechilli:是的,我已经尝试过了,但它不会改变结果。