Título: [ASM] Calcular direccion de CALL Publicado por: Lambda en 12 Mayo 2009, 00:45 am Vereis, estoy programando X programa y para ello necesito llamar a una funcion "dinamicamente", o sea, tengo que generar el codigo binario a partir de un unsigned long que contiene la direccion de la funcion a llamar, la verdad es que nunca habia echo esto, por lo tanto al igual que hice con el push, hice esto.
Código
Pero en ese momento me di cuenta de que las direcciones de los calls son relativas y no absolutas, estuve buscando por google y no encontre nada que me aclarara como calcular la direccion. Alguien tiene idea de como calcular la direccion que habria que poner justo despues del 0xE8? Título: Re: [ASM] Calcular direccion de CALL Publicado por: Arkangel_0x7C5 en 12 Mayo 2009, 00:59 am mira esto.
Cita de: Intel Hex Opcodes And Mnemonics E8 cw CALL rel16 Call near, relative, displacement relative to next instruction puedes usar relativos y no relativosE8 cd CALL rel32 Call near, relative, displacement relative to next instruction FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16 FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32 9A cd CALL ptr16:16 Call far, absolute, address given in operand 9A cp CALL ptr16:32 Call far, absolute, address given in operand FF /3 CALL m16:16 Call far, absolute indirect, address given in m16:16 FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32 El que creo que te puede ir mejor es el de FF15 call no relativo Saludos Título: Re: [ASM] Calcular direccion de CALL Publicado por: Lambda en 12 Mayo 2009, 01:17 am mira esto. Cita de: Intel Hex Opcodes And Mnemonics E8 cw CALL rel16 Call near, relative, displacement relative to next instruction puedes usar relativos y no relativosE8 cd CALL rel32 Call near, relative, displacement relative to next instruction FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16 FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32 9A cd CALL ptr16:16 Call far, absolute, address given in operand 9A cp CALL ptr16:32 Call far, absolute, address given in operand FF /3 CALL m16:16 Call far, absolute indirect, address given in m16:16 FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32 El que creo que te puede ir mejor es el de FF15 call no relativo Saludos Si, ya habia visto eso buscando en google, el problema es que no puedo pasar de 5 bytes ya que tengo que sobreescribir un CALL en un ejecutable para que apunte al mio, (no es hooking, puedo hacerlo como si fuera hooking pero prefiero hacerlo de esta manera, ya que para lo que quiero hacer es mas limpio) Título: Re: [ASM] Calcular direccion de CALL Publicado por: Arkangel_0x7C5 en 12 Mayo 2009, 01:35 am entonces, usa la que tu dijiste, es relativa a la siguiente instrucción. el uno seria el primer vite de la siguiente o algo asi.
Saludos Título: Re: [ASM] Calcular direccion de CALL Publicado por: Lambda en 12 Mayo 2009, 02:29 am entonces, usa la que tu dijiste, es relativa a la siguiente instrucción. el uno seria el primer vite de la siguiente o algo asi. Saludos Ese es el problema, que no se como calcularlo xD, he estado haciendo varias sumas y restas y ninguna me da lo que creo que me tiene que dar. Código
Por que en ese CALL a 0x00434AE0 los 4 bytes siguientes al E8 son 0xA2AAEEFF? es lo que no se resolver. Título: Re: [ASM] Calcular direccion de CALL Publicado por: bizco en 12 Mayo 2009, 02:37 am pero que necesitas cambiar este call CALL 00434AE0 a un de tu codigo? este codigo esta en una dll?
Título: Re: [ASM] Calcular direccion de CALL Publicado por: Lambda en 12 Mayo 2009, 02:39 am pero que necesitas cambiar este call CALL 00434AE0 a un de tu codigo? este codigo esta en una dll? Si, el CALL a la nueva direccion sera una direccion de una DLL Título: Re: [ASM] Calcular direccion de CALL Publicado por: Arkangel_0x7C5 en 12 Mayo 2009, 02:44 am restando, y si es negativo seria hacia atras. recuerda que para leer tu un numero hex. tienes que invertirlo.
ej: a2aaeeff se leeria 0xFFEEAAA2 Saludos Título: Re: [ASM] Calcular direccion de CALL Publicado por: Lambda en 12 Mayo 2009, 02:48 am restando, y si es negativo seria hacia atras. recuerda que para leer tu un numero hex. tienes que invertirlo. ej: a2aaeeff se leeria 0xFFEEAAA2 Saludos Si, eso ya lo sabia que habia que leerlos al reves, pero bueno, sigo sin aclararme que hay que restar a que XD, igual, mañana por la mañana lo mirare por que ahora con la hora que es tengo mi calculadora bastante espesa xD Título: Re: [ASM] Calcular direccion de CALL Publicado por: Arkangel_0x7C5 en 12 Mayo 2009, 03:16 am quizad esto te sirva.
Cita de: OnllyDbg $-3EB FUNC.401B08: $00 E8 10FCFFFF CALL MIEXE.00404B08 $+15 E8 FBFBFFFF CALL MIEXE.00404B08 saludos Título: Re: [ASM] Calcular direccion de CALL Publicado por: bizco en 12 Mayo 2009, 04:04 am te pongo un ejemplo simple para cambiar el call en tu propio ejecutable para que te de una idea mas que nada.
Código: push esi siendo direccion direccion equ $+0Eh. si lo compilas veras los cambios y que compilando "call primera" se ejecuta "segunda". Título: Re: [ASM] Calcular direccion de CALL Publicado por: Lambda en 12 Mayo 2009, 13:45 pm Gracias a todos, por fin lo pude hacer xD, basicamente es restarle a la direccion de la funcion a llamar el offset actual + 5
|