Dado que C (y C ++, que técnicamente se pueden considerar una adición a C) está cerca del ensamblaje, muchos de los detalles del procesador deben modelarse y controlarse desde sus construcciones. El ejemplo más sencillo que muestra esto es el error de desbordamiento del índice de matriz.
Este error conlleva el uso incorrecto de un índice de matriz de tal manera que recupere una parte de la memoria que no fue asignada a dicha matriz.
int[2] arrayX;
printf(arrayX[3]);
Un compilador adecuado se quejará en el bloque de código anterior sobre el índice fuera de alcance, ya que un análisis estático del código ya lo muestra. También puede utilizar matrices creadas dinámicamente que son desconocidas, ya que en el momento de la compilación, no se dará ninguna advertencia.
Ahora, cuando ingresa una función, efectivamente asigna una dirección de retorno de código a la pila. así como las ubicaciones para el "objeto" de retorno en la misma pila mencionada. Esta pila se llama call stack
y no debe ser manipulada por el programa en operaciones normales.
Con estos dos mecanismos podemos "engañar" a un programa para que ejecute nuestro propio código. Lo hacemos agregando instrucciones del procesador en una ubicación de memoria conocida y manipulando la pila de llamadas para cambiar el puntero de retorno a mi bloque de código inyectado. (Esto se llama inyección de código).
Este comportamiento se puede desencadenar por un error de desbordamiento o algún otro mecánico para ajustar la pila de llamadas, esto depende del sistema operativo en funcionamiento y del hardware en uso, y es la principal forma en que funcionan los ataques.
Sin embargo, existen vulnerabilidades que explotan llamadas de nivel inferior a las que ofrece C (básicamente, inyectando código de máquina / ensamblaje en el código del programa).
En C ++ hay métodos adicionales para agregar código a una aplicación, mediante la utilización (o abuso) de los mecanismos de carga de la Clase.
Si desea aprender sobre estos conceptos, sugeriría aprender sobre metasploit. Leyendo en detalle cómo funciona C (la Biblia es un buen comienzo)
e intenta leer los documentos del compilador GCC.