MS構造化例外から例外へのマッピングコードを変更することを検討しています。新しいC++11 error_code / error_condition/exceptionメカニズムを使用する必要があります。
私の理解では、一般的な考え方では、最初にエラーコードをstd :: error_conditionコードにマップしてみてください。それができない場合は、独自のカスタムerror_conditionコードを作成してください。
std :: errcは、POSIXエラーでうまく機能するように調整されていることがわかりました。通常のOS呼び出しとはかなり異なるエラーユニバースを持つソースからコードを取得している場合、それはうまくマッピングされません。
たとえば、MicrosoftのSEHコードを見てみましょう。これらはOSからのものであるため、理論的には、POSIX以外のすべてのものと同様にマップする必要があります。しかし、それは確かにまったくうまくマッピングされていないようです:
EXCEPTION_ACCESS_VIOLATION = permission_denied
EXCEPTION_ARRAY_BOUNDS_EXCEEDED = argument_out_of_domain perhaps?
EXCEPTION_BREAKPOINT = ?
EXCEPTION_DATATYPE_MISALIGNMENT = ?
EXCEPTION_FLT_DENORMAL_OPERAND = ?
EXCEPTION_FLT_DIVIDE_BY_ZERO = ?
EXCEPTION_FLT_INEXACT_RESULT = ?
EXCEPTION_FLT_INVALID_OPERATION = ?
EXCEPTION_FLT_OVERFLOW = ?
EXCEPTION_FLT_STACK_CHECK = ?
EXCEPTION_FLT_UNDERFLOW = ?
EXCEPTION_GUARD_PAGE = ?
EXCEPTION_ILLEGAL_INSTRUCTION = ?
EXCEPTION_IN_PAGE_ERROR = ?
EXCEPTION_INT_DIVIDE_BY_ZERO = ?
EXCEPTION_INT_OVERFLOW = value_too_large perhaps, but then what do I use for _STACK_OVERFLOW?
EXCEPTION_INVALID_DISPOSITION = ?
EXCEPTION_INVALID_HANDLE = ?
EXCEPTION_NONCONTINUABLE_EXCEPTION = ?
EXCEPTION_PRIV_INSTRUCTION = ?
EXCEPTION_SINGLE_STEP = ?
EXCEPTION_STACK_OVERFLOW = value_too_large perhaps, but then what do I use for _INT_OVERFLOW?
では、これを攻撃する最善の方法は何でしょうか?