One example of how an error can create an opportunity to use:
Let's say you have a routine in a program that modifies data in an array of characters. Let's say it also contains an error when the array has a certain size or the array contains certain characters, the routine inadvertently writes over the end of the array of characters.
This in itself does not seem like a big opportunity, but depending on how the execution reaches the subroutine and other artifacts of how it is implemented and compiled, it can be used as a springboard to execute arbitrary code.
In traditional programming (C, C ++), character arrays (buffers) are often stored in the program stack. The stack is a very fast and easy memory allocation for small temporary data.
, , - - , .
, : , , , , , , , . , , "" (, ) Halt() Format() PhoneHome(). DLL, .
. .
- , . . , .