es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comportamiento de desbordamiento de búfer de pila

¿Declarar una variable después de un búfer en una función hace que su área de memoria no sea accesible por el búfer? Porque intenté hacer eso y cada vez que compilé el programa el búfer todavía puede acceder a él. La primera dirección del búfer es siempre la dirección más baja posible del marco de la pila.

¿Tiene que ver con el compilador? Estoy usando gcc.

“`
int verificar_autenticacion(contraseña de char *){
int demovar;
char contraseñabuffer[16];
int autenticacion_flag;

<pre><code>strcpy(password_buffer,password);
if(strcmp(password_buffer,"brilling")==0)autenticacion_flag=1;
if(strcmp(password_buffer,"outgrabe")==0)autenticacion_flag=1;

return autenticacion_flag;
</code></pre>

}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Declarar una variable después de un búfer en una función no hace que su área de memoria sea inaccesible por el búfer. El búfer aún puede acceder a ella debido a cómo se asigna la memoria en la pila. La primera dirección del búfer siempre es la dirección más baja posible del marco de la pila, y cualquier variable declarada después del búfer tendrá direcciones de memoria más altas. Sin embargo, el búfer aún puede acceder a la memoria de estas variables al ir más allá de su espacio asignado y sobrescribirlas. Esto se conoce como desbordamiento de búfer y puede ser una grave vulnerabilidad de seguridad si no se maneja adecuadamente.

    El hecho de que el búfer aún pueda acceder a la variable después de ella sugiere que el compilador no está haciendo ninguna protección de la pila o prevención de desbordamiento de búfer. En este caso, está utilizando gcc, que puede no tener estas protecciones habilitadas de manera predeterminada. Para prevenir desbordamientos de búfer, debe utilizar funciones de cadena más seguras como strncpy y limitar el tamaño del búfer de entrada para prevenir desbordamientos.

    En resumen, declarar una variable después de un búfer no hace que su área de memoria sea inaccesible por el búfer, y es importante utilizar prácticas seguras de codificación y características del compilador para prevenir desbordamientos de búfer.

Comments are closed.