Cómo omitir una línea haciendo un desbordamiento de búfer en C
Quiero omitir una línea en C, la líneax=1;
en la sección principal usandobufferoverflow
; Sin embargo, no sé por qué no puedo omitir la dirección de4002f4
a la siguiente dirección4002fb
a pesar del hecho de que estoy contando 7 bytes desde<main+35>
a<main+42>
.
También configuré las opciones del entorno randomniZation y execstack en un entorno Debian y AMD, pero todavía obtengox=1;
. ¿Qué tiene de malo este procedimiento?
He usado dba para depurar la pila y las direcciones de memoria:
0x00000000004002ef <main+30>: callq 0x4002a4 **<function>**
**0x00000000004002f4** <main+35>: movl $0x1,-0x4(%rbp)
**0x00000000004002fb** <main+42>: mov -0x4(%rbp),%esi
0x00000000004002fe <main+45>: mov $0x4629c4,%edi
void function(int a, int b, int c)
{
char buffer[5];
int *ret;
ret = buffer + 12;
(*ret) += 8;
}
int main()
{
int x = 0;
function(1, 2, 3);
x = 1;
printf("x = %i \n", x);
return 0;
}