Digamos que abro un ejecutable con un debugger y agrego el siguiente codigo:
Código:
push rbp
mov rbp, rsp
push r9
push r8
push rdx
push rcx
sub rsp, 20
mov r9, 0
mov r8, 0x0000F7855219251 ; en esta direccion hay una cadena
mov rdx, 0x0000F7855219251 ; ^
mov rcx, 0
call user32.MessageBoxA
add rsp, 20
pop rcx
pop rdx
pop r8
pop r9
pop rbp
Funciona perfecto y sin problemas, pero a la hora de parchear el ejecutable y ejecutarlo de nuevo, las direcciones quedan obsoletas.
Es decir, la cadena ya no esta en 0x0000F7855219251 si no que se cargo en otra direccion diferente, lo mismo pasa con la direccion de user32.MessageBoxA.
Esto por supuesto produce que el programa crashee.
Para destacar: La cadena se carga en una direccion diferente, pero es la misma direccion relativa al codigo. Es decir, esta siempre a 55 bytes desde el inicio del codigo.
Lo mismo con la funcion MessageBoxA, pero la libreria user32 se carga en una direccion diferente.
Como puedo resolver este problema?
Gracias