Autor
|
Tema: Mov edi, edi (Leído 5,583 veces)
|
hosuko
Desconectado
Mensajes: 8
|
Hola que tal?, soy nuevo en esto del ensamblador y al mirar que hacia la libreria user32.dll cuando le llamas a MessageBox usando OllyDbg, me encontré con este código: . Mov edi, edi
Cuando lo ejecuto carga los datos que puse en la pila. ¿Acaso mov no se limita a mover los datos de un argumento a otro?. Si alguien me pudiera explicar el porqué de esa instrucción y su funcionamiento, gracias.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
No pasa eso que decis, depura de nuevo, cuando lo ejecutas no cambia nada, esa instruccion mueve al registro edi el valor contenido en el registro edi, esta ahi para otra cosa (hotpatching) que sinceramente no viene al caso.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
http://msmvps.com/blogs/kernelmustard/archive/2005/04/25/44413.aspx
|
|
|
En línea
|
|
|
|
hosuko
Desconectado
Mensajes: 8
|
Gracias por las respuestas.
Creo que lo entiendo. En realidad mov edi, edi no sirve para nada, según entendí, mi inglés tampoco es para tirar flores, lo que ocurre es que si hay un 'hook' sustituye esa linea y las 5 anteriores en las que no hay código, solamente NOP, por un salto a otra función que es la encargada de realizar la lectura de la pila o lo que sea.
Si no entendí mal, el HotPaching lo que hace es sustituir o actualizar código binario sin necesidad de reiniciar. El echo de poner mov edi, edi y no dos nop es porque resulta más rápido leer una instrucción de 2 bytes que no 2 nop, de modo que si no se necesita realizar el hotpaching es más rápido de esa manera.
Me queda una duda. ¿Es posible mirar a donde salta y lo que hace?.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
¿Que tiene que ver la pila? La funcion hara todo lo que tiene que hacer, eso es un detalle, puede no tener parametros y obviar el uso de la pila. En lugar de comprender tu primera duda te pones a investigar un tema avanzado ... mejor lee sobre la pila (instrucciones push, pop, registros esp y ebp, etc).
Y si, con el depurador podes ver a que direccion van ambos saltos, el primero (el de mov edi, edi) es uno corto que va al segundo y este (el que se pone en los nop's) va al hook.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
hosuko
Desconectado
Mensajes: 8
|
Gracias por responder tan rápido. Lo de la pila lo digo porque esa era la duda. Todo viene a que no me di cuenta que añade a la pila datos, creo que necesito gafas . Ahora que estaba escribiendo aquí el contenido de la pila ya lo he visto, vaya que fallo. Este es el contenido de la pila, ahora ya lo entiendo : Antes del mov edi, edi: 6FFB0 0401014 Call to MessageBoxA from 2.0040100E 6FFB4 0000000 hOwner = 0 6FFB8 0402000 Text = "Hola" 6FFBC 040200C Title = "Titulo" 6FFC0 00000000 Style = MB_OK | MB_APPLMODAL 6FFC4 7C817077 Return to kernel32.7C817077 6FFC8 7C920228 ntdll.7C920228 Después de ejecutar dicha linea: 6FFB0 0401014 Return to 2.0401014 from user32.MessageBoxA 6FFB4 0000000 Añade estas 2 lineas.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
Lee con atencion, no añade nada de nada y el contenido es exactamente el mismo:
6FFB0 0401014 Call to MessageBoxA from 2.0040100E 6FFB4 0000000 hOwner = 0 6FFB8 0402000 Text = "Hola" 6FFBC 040200C Title = "Titulo" 6FFC0 00000000 Style = MB_OK | MB_APPLMODAL 6FFC4 7C817077 Return to kernel32.7C817077 6FFC8 7C920228 ntdll.7C920228
Después de ejecutar dicha linea: 6FFB0 0401014 Return to 2.0401014 from user32.MessageBoxA 6FFB4 0000000
Lo que figura como texto es simplemente una ayuda del OllyDbg.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Space.Medafighter.X
Desconectado
Mensajes: 24
|
En realidad mov edi, edi no sirve para nada
Claro que sirve, sirve de relleno para facilitar el "hotpatching" o "hooking" -como quieran llamarlo- y completar un tamaño determinado al comienzo del API. Si no entendí mal, el HotPaching lo que hace es sustituir o actualizar código binario sin necesidad de reiniciar.
No, en este caso sería para que una aplicación X ejecute código cuando llame al API.
|
|
|
En línea
|
|
|
|
|
|