Estoy aprendiendo sobre las cadenas de ROP. Me enfrento a un comportamiento que no puedo explicar.
Este es mi código de ejemplo:
int main(int argc, char* args[]) {
char text[200];
scanf("%s", text);
return 0;
}
Creo una cadena ROP que comienza así:
p = 'A'* 212
p += pack('<I', 0x0806ea3a) # pop edx ; ret
p += pack('<I', 0x080eb060) # @ .data
p += pack('<I', 0x080bbd06) # pop eax ; ret
Sin embargo, cuando ejecuto el exploit obtengo un error de segmentación.
Stopped reason: SIGSEGV
0xbf00bd06 in ?? ()
Para mí, parece que, por algún motivo, los dos primeros bytes de la dirección que usé en la cadena ROP ( 0x080bbd06
) se sobrescriben ( 0xbf00bd06
). No sé por qué sucede esto. ¿Alguna idea de cómo arreglar esto?