1)En el ejemplo del tutorial que dice:
Código:
void function(int a, int b, int c){
char buffer1[5];
char buffer2[10];
}
void main(){
function(1,2,3);
}
char buffer1[5];
char buffer2[10];
}
void main(){
function(1,2,3);
}
En la parte del codigo ensamblador me tira lo siguiente:
Código:
function:
pushl %ebp
movl %esp, %ebp
subl $40, %esp
movl %gs:20, %eax
movl %eax, -12(%ebp)
xorl %eax, %eax
movl -12(%ebp), %eax
xorl %gs:20, %eax
je .L3
call __stack_chk_fail
.L3:
leave
ret
.size function, .-function
pushl %ebp
movl %esp, %ebp
subl $40, %esp
movl %gs:20, %eax
movl %eax, -12(%ebp)
xorl %eax, %eax
movl -12(%ebp), %eax
xorl %gs:20, %eax
je .L3
call __stack_chk_fail
.L3:
leave
ret
.size function, .-function
Haciendo referencia a esta parte, el tutorial dice lo sgte:
pushl %ebp
movl %esp, %ebp
subl $40, %esp
"Esto mueve el EBP, el puntero de marco, a la pila. Despues copia el actual de SP a EBP, haciendo el nuevo puntero FP. Al puntero FP guardado se le llama SFP. Despues se libera espacio para las variables locales redimensionando SP."
Ahora, la funcion (MOV a,b) no "copia" lo que tiene b en a. Es decir a <- b ?
En este caso: (movl %esp, %ebp), no guardaria el contenido de EBP en ESP? Por que dice que se copia el actual SP a EBP? No seria al revez?
2) El tutorial dice que un word en su caso es de 4bytes. Ok.
En el codigo como tiene buffer1[5] y buffer2[10], la pila se aumenta en 20 bytes, ya que el primero ocupado 2 word y el segundo 3 word. Ahora cuando yo compilo este codigo:
Código:
void funcion(..){
char buffer[2];
}
...
Utilizo un word, no? la pila aumenta en 16. Entonces mi word valdria 16?char buffer[2];
}
...
Cuando compilo
Código:
void funcion(..){
char buffer[7];
}
...
Sigue valiendo 16 (no estoy utilizando 2 word)char buffer[7];
}
...
Cuando compilo
Código:
void funcion(..){
char buffer[8];
}
...
Vale 24 (estaria utilizando 3 word de 8 bytes) o 1 word de 16 bytes y otro de 8?char buffer[8];
}
...
Esa es mi duda, el tamaño del word cual seria?
Cuanto vale mi word, 8 o 16???
Bueno gente, disculpen las molestias y muchas gracias de antemano.










Autor


En línea


