Предсказуемый код завершения аварийного процесса в Windows

Для процесса, обычно завершающего работу в Windows, код завершения процесса обычно является либо возвращаемым значением изmainили код выхода переданstd::exit. %ERRORLEVEL% затем можно использовать для запроса кода выхода, и это можно использовать для определения, правильно ли выполнялась программа, или были какие-то исключительные входы / сбои, которые указывают на конкретную проблему (специфическую для приложения).

Тем не менее, я заинтересован в коде выхода, если процесс падает. Возьмите очень простой пример программы:

int main()
{
    int * a = nullptr;
    *a = 0xBAD;
    return 0;
}

Когда я компилирую это и запускаю в Windows, в командной строке я получаю:

MyCrashProgram.exe -> crashes
echo %ERRORLEVEL%  -> -1073741819

Код выхода соответствует этому номеру. Что приводит меня к нескольким вопросам:

Был код выхода-1073741819 как-то предсказуемо, основано на сбое недопустимой записи?Если да, есть ли способ определить тип сбоя, основываясь на коде выхода?Меняется ли это в зависимости от используемого компилятора (я использовал MSVC 2012)?Меняется ли это в зависимости от используемой версии Windows (я использовал Win10 TP)?Меняется ли это с архитектурой (например, x64 - я использовал Win32)?

Обратите внимание, меня не интересует, как изменить программу, чтобы перехватить исключение. Я заинтересован в классификации сбоев, которые могут произойти в существующих программах, которые я не могу изменить.

Ответы на вопрос(3)

Ваш ответ на вопрос