Typical causes include accessing invalid memory addresses,[a] incorrect address values in the program counter, buffer overflow, overwriting a portion of the affected program code due to an earlier bug, executing invalid machine instructions (an illegal or unauthorized opcode), or triggering an unhandled exception.
The original software bug that started this chain of events is typically considered to be the cause of the crash, which is discovered through the process of debugging.
Some crashes are exploitable and let a malicious program or hacker execute arbitrary code, allowing the replication of viruses or the acquisition of data which would normally be inaccessible.
Most Windows and Unix GUI applications respond by displaying a dialogue box (such as the one shown in the accompanying image) with the option to attach a debugger if one is installed.
Since they frequently display no error message, it can be very difficult to track down the source of the problem, especially if the times they occur and the actions taking place right before the crash do not appear to have any pattern or common ground.
The software running the web server behind a website may crash, rendering it inaccessible entirely or providing only an error message instead of normal content.
Modern multi-tasking operating systems, such as Linux, and macOS, usually remain unharmed when an application program crashes.
[6] Moreover, many software bugs which cause crashes are also exploitable for arbitrary code execution and other types of privilege escalation.
For this, several techniques exist: STAR uses symbolic execution,[9] EvoCrash performs evolutionary search.