Cómo insertar un fragmento de código grande al hacer una pregunta de desbordamiento de pila
Desbordamiento de pila (desbordamiento de pila) significa que se escriben demasiados datos en el bloque de datos independientemente del tamaño del bloque de datos local asignado en la pila, lo que hace que los datos se salgan de los límites y sobrescriban los antiguos. datos de la pila. O puede interpretarse como incrustar un fragmento de código en una cadena larga y sobrescribir la dirección de retorno del proceso con la dirección de este código, de modo que cuando el proceso regrese, el programa comenzará a ejecutar este código autoescrito. Por ejemplo, el siguiente programa: #includeintmain(){charname[8]; printf("Por favor escriba su nombre:"); get(name); printf("Hello.s!", return0;} Compile y ejecute, ingrese); ipxodiAAAAAAAAAAAAAA, después de ejecutar gets(name), la pila es la siguiente: parte inferior de la memoria parte superior de la memoria nombreEBPretlt; -------[ipxodiAA][AAAA][AAAA]^amp; la cadena de nombre que ingresamos es demasiado larga, la matriz de nombres no puede acomodarla, por lo que tenemos que continuar escribiendo 'A' en la parte superior de la memoria. Dado que la pila crece en la dirección opuesta a la memoria, estas 'A' cubren elementos más antiguos de la pila. 'EBPret' están todos cubiertos por 'A'. Cuando regrese principal, el código ASCII de 'AAAA': 0x41414141 se utilizará como dirección de retorno. La CPU intentará ejecutar la instrucción en 0x41414141 y se producirá un error. ¡Esto es un desbordamiento de pila!