la cuestión x86-instrucción sub

votos
0

Supongamos que tenemos el siguiente código c

void fun(void){
    printf(this is fun\n);
}

A continuación, se compila con el modo de depuración, obtenemos el siguiente código de desmontar:

push ebp
mov ebp,esp
sub esp, 0xc0
...

Ok, acabamos de discutir:

sub esp, 0xc0

Mi pregunta es: ¿por qué es el valor por defecto 0xc0, y no al valor, tales como 0xF0, 0xFF... y así sucesivamente?

Publicado el 18/12/2018 a las 10:04
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Esta es la configuración del marco de pila estándar, ahorrando el puntero de pila y luego usando EBP para la indexación. La cantidad sustraída de ESP es lo que se asignan para el almacenamiento local de variables del procedimiento, y las variables locales se accederá al hacer referencia [EBP- ??].

Sin ver el código para su procedimiento es difícil decir por qué se asigna de que la cantidad de almacenamiento. No hay ningún valor por defecto utilizado por el compilador, que siempre asigna exactamente lo que se necesita. Puede hacer esto porque los tipos de variables locales deben ser declaradas explícitamente, y el compilador sabe la cantidad de espacio utilizado por cada tipo. No hay una aleatoriedad o incertidumbre en ella, y ningún beneficio para la asignación de almacenamiento adicional. Asimismo, no puede ver cómo la aleatorización del tamaño de almacenamiento variable local evitaría cualquier tipo de ataque basado en pila. La mayoría de los procesadores modernos tienen las medidas de prevención de ejecución de datos de hardware en su lugar, por lo que estos ataques imposible de todos modos.

Respondida el 18/12/2018 a las 11:43
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more