Muchas gracias por contestar, a ver si voy entendiendo y disculpen por el codigo en c.
Sea el sgte codigo:
#include <stdio.h>
void function(){
int i;
int* p;
p=&i+2; //Estaria apuntando al ret
}
void main(){
int j;
function();
j=5;
printf("\n%d\n",j);
j=6;
printf("\n%d\n",j);
}
Al desamblar el main:
Dump of assembler code for function main:
0x080483fc <main+0>: push %ebp
0x080483fd <main+1>: mov %esp,%ebp
0x080483ff <main+3>: and $0xfffffff0,%esp
0x08048402 <main+6>: sub $0x20,%esp
0x08048405 <main+9>: call 0x80483e4 <function>
0x0804840a <main+14>: movl $0x5,0x1c(%esp) -> ESTA SERIA LA DIRE DE RETORNO
0x08048412 <main+22>: mov $0x8048510,%eax
0x08048417 <main+27>: mov 0x1c(%esp),%edx
0x0804841b <main+31>: mov %edx,0x4(%esp)
0x0804841f <main+35>: mov %eax,(%esp)
0x08048422 <main+38>: call 0x804831c <printf@plt>
0x08048427 <main+43>: movl $0x6,0x1c(%esp)
0x0804842f <main+51>: mov $0x8048510,%eax
0x08048434 <main+56>: mov 0x1c(%esp),%edx
0x08048438 <main+60>: mov %edx,0x4(%esp)
0x0804843c <main+64>: mov %eax,(%esp)
0x0804843f <main+67>: call 0x804831c <printf@plt>
0x08048444 <main+72>: leave
0x08048445 <main+73>: ret
End of assembler dump.
Ahora yo quiero modificar la direccion de retorno para llegar a que salte el primer printf y ejecute el 2do j=6;
Es decir, correctamente la ret es:
0x0804840a <main+14>: movl $0x5,0x1c(%esp)
yo quiero modificarla y que caiga en:
0x08048427 <main+43>: movl $0x6,0x1c(%esp)
Estoy a 43-14 bytes = 29 bytes de diferencia entre la ret correcta y la ret que quiero donde caiga.Esto es correcto? Tendria que aumentar en 29 bytes la ret para caer aqui?Pero 29 no es multiplo de word, se podria aumentar?
Gracias !!!