elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado] Ayuda con ASM inline
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Ayuda con ASM inline  (Leído 2,118 veces)
saawyeer

Desconectado Desconectado

Mensajes: 3


Ver Perfil
[Solucionado] Ayuda con ASM inline
« en: 28 Marzo 2013, 00:26 am »

Bueno tengo el siguiente problema, he realizado con éxito un salto (jmp) en una dirección de un proceso:

Código:
DWORD dwDireccion = 0x00692B0C;

__declspec( naked ) void asmSalto() {
  __asm
    {
    mov eax, dwDireccion
    jmp Direccion
    }
}

Se inyectan correctamente las instrucciones pero acá esta mi problema, las instrucciones originales de la dirección antes de ser inyectadas eran 6 bytes en la memoria pero con la inyección anterior equivale a mas de 6 bytes, lo que origina que se cuelgue el programa:

Instrucciones originales de 6 bytes:
Código:
0042276B - 29 83 64 04 00 00        - sub [ebx+00000464],eax

Se podría hacer con un simple salto; Pero da error el copilador, se vería en memoria asi:
Código:
__asm 
{
    jmp 0x00692B0C
}

Son solo 5 bytes en la memoria le agregamos 1 mas con un nop y tendríamos el salto correctamente:
Código:
00540967  - E9 A0 21 15 00           - jmp 00692B0C
0054096C  - 90                       - nop


Hay alguna forma de hacer el salto sin ocupar mas de 6 bytes? Agradecería mucho sus respuestas o comentarios.


« Última modificación: 28 Marzo 2013, 06:28 am por saawyeer » En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Ayuda con ASM inline
« Respuesta #1 en: 28 Marzo 2013, 03:00 am »

Son solo 5 bytes en la memoria le agregamos 1 mas con un nop y tendríamos el salto correctamente:
Código:
00540967  - E9 A0 21 15 00           - jmp 00692B0C
0054096C  - 90                       - nop

Hay alguna forma de hacer el salto sin ocupar mas de 6 bytes? Agradecería mucho sus respuestas o comentarios.

Si te referís a otra manera de hacer un salto con 6 bytes a lo sumo si la hay, aún así te estás respondiendo tu misma pregunta un par de renglones arriba...  :P


B#


En línea



x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Ayuda con ASM inline
« Respuesta #2 en: 28 Marzo 2013, 03:18 am »

Bueno tengo el siguiente problema, he realizado con éxito un salto (jmp) en una dirección de un proceso:

Código:
DWORD dwDireccion = 0x00692B0C;

__declspec( naked ) void asmSalto() {
  __asm
    {
    mov eax, dwDireccion
    jmp Direccion
    }
}

Se inyectan correctamente las instrucciones pero acá esta mi problema, las instrucciones originales de la dirección antes de ser inyectadas eran 6 bytes en la memoria pero con la inyección anterior equivale a mas de 6 bytes, lo que origina que se cuelgue el programa:

Instrucciones originales de 6 bytes:
Código:
0042276B - 29 83 64 04 00 00        - sub [ebx+00000464],eax

Se podría hacer con un simple salto; Pero da error el copilador, se vería en memoria asi:
Código:
__asm 
{
    jmp 0x00692B0C
}

Son solo 5 bytes en la memoria le agregamos 1 mas con un nop y tendríamos el salto correctamente:
Código:
00540967  - E9 A0 21 15 00           - jmp 00692B0C
0054096C  - 90                       - nop


Hay alguna forma de hacer el salto sin ocupar mas de 6 bytes? Agradecería mucho sus respuestas o comentarios.


Código:
jmp dword ptr [0x80808080]
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Ayuda con ASM inline
« Respuesta #3 en: 28 Marzo 2013, 03:42 am »

La alternativa con 6 bytes: (que me falto agregar :P)
Código
  1. push Direccion;
  2. ret;


B#
« Última modificación: 28 Marzo 2013, 03:45 am por IEAX » En línea



saawyeer

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Ayuda con ASM inline
« Respuesta #4 en: 28 Marzo 2013, 06:28 am »

@IEAX
@x64Core

Muchas gracias por sus respuestas, ya solucione el problema :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ASM INLINE GCC
Programación C/C++
HaX991 0 1,722 Último mensaje 11 Mayo 2012, 19:50 pm
por HaX991
ASM INLINE
ASM
HaX991 2 2,985 Último mensaje 13 Mayo 2012, 13:43 pm
por HaX991
Pregunta Acerca de inline...
Programación C/C++
x64core 1 1,608 Último mensaje 19 Septiembre 2012, 19:46 pm
por avesudra
Ayuda! Problema con MASM Inline « 1 2 »
ASM
Vaagish 13 7,318 Último mensaje 30 Agosto 2013, 18:49 pm
por Eternal Idol
¿Son las funciones inline, inline todo el tiempo?
Programación General
Usuario887 2 2,759 Último mensaje 1 Noviembre 2021, 17:46 pm
por Usuario887
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines