Dudas Taller #2 [Bug Hunting]

Iniciado por snakingmax, Junio 15, 2011, 01:03:56 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 15, 2011, 01:03:56 PM Ultima modificación: Julio 10, 2011, 12:49:43 AM por ANTRAX
Aquí las dudas que surjan en el segundo taller de bug hunting.

Holas aqui mi duda, aunque en si entiende muy bien esto:
CitarEl ancho de palabra de nuestro procesador de 32 bits, por aquello de 8 bits es 1 byte, hablamos de un procesador de 4 bytes (hablamos también de un ancho de palabra de 4 bytes). Por tanto:
Buffer1 que se declara de 5 bytes →Ocupa en memoria realmente 2 palabras, es decir, 8 bytes.
Buffer2 que se declara de 10 bytes →Ocupa en memoria realmente 3 palabras, es decir, 12 bytes.
A q se refiere con ancho de palabra ?

CitarEl ancho de palabra de nuestro procesador de 32 bits, por aquello de 8 bits es 1 byte
No se entende de veras. Haber 8 bits es 1 byte de acuerdo, entonces una palabra ocupa 8 bits, q es lo mismo a decir 1 byte...
Ah entonces se puede entender que una palabra es 1 byte ?

Citarhablamos de un procesador de 4 bytes (hablamos también de un ancho de palabra de 4 bytes)
mmm de donde salio esos 4 bytes, mmm no sera 4 bits o un nible en este caso ...

Solo esta parte hace q no pueda entender muy bien esta entrega, ahora mismo estoy leyendo un libro ASM para poder comprender algunas partes. :P

Espero q me tengas paciencia con estas preguntas.

Salud0s
Your kung-fu is not strong!

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
A q se refiere con ancho de palabra ?
Con ancho de palabra me refiero al número de bits que maneja en paralelo el procesador.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Ah entonces se puede entender que una palabra es 1 byte ?
No, porque hemos dicho que trabajamos con un procesador de 32 bits. Y sabemos que 32 bits son 4 bytes.
(Para pasar de bits a bytes se divide entre 8 )

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Espero q me tengas paciencia con estas preguntas.
La que haga falta, cualquier duda para estamos.

Creo que hay una errata respecto a donde digo "1Byte para el puntero RET"
Un puntero a entero debería ocupar 4Bytes, ese Byte que falta para sobreescribir el RET es por otro motivo diferente al que menciono. Pero no te preocupes, en general se entiende el funcionamiento.

Simplemente ten paciencia, se que es algo complejo al principio.
Saludos

Error en el paper 2:

La pila quedaría de la siguiente manera si miramos el tutorial "Smashing The Stack for fun and profit":
                                 buffer2       buffer1   sfp    ret    a      b     c
                               [            ]      [        ]   [    ]  [    ] [    ] [    ] [    ]
Tamaño en Bytes:        10                8          4

De forma que la distancia al ret son 8 Bytes de Buffer1 + 4 Bytes de SPF = 12 Bytes
Y el cálculo y esquema de la pila es correcto :-)
Yo he hecho cuadrar el código en el paper para que sumase 13 y funcionase en los nuevos compiladores GCC.

Distancia desde el comienzo de buffer1 hasta el ret:
8 + 4 = 12 Bytes (+1 byte por la version del compilador gcc que, ahora, reserva mas espacio)
En el paper dice que ese byte se debía a un puntero declarado llamado RET, pero no es por esa razón. Es por la versión del compilador GCC.

Si queréis mas detalle sobre esto podéis mirar aquí:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta