elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 02:46  

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Sumar eax i ebx
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sumar eax i ebx  (Leído 1,953 veces)
E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Sumar eax i ebx
« en: 21 Marzo 2010, 01:57 »

Hola,

acabo de empezar a aprender ASM, hace 20 minutos, y estoy con un ejercicio de E0N... que el registro EAX tenga el valor 2 i el registro EBX el valor 5 y, que se sumen, y el valor quede en EAX... después POR MI CUENTA quiero mostrar el resultado con un MessageBoxA(), pero crashea, cuando acaba de ensamblar:

Código
include 'win32ax.inc'
 
.code
 
start:
       mov eax,2
       mov ebx,5
       add eax,ebx
 
invoke MessageBoxA,0,eax,"suma",0
invoke ExitProcess,0
 
.end start


¿Alguna solución?

Muchas gracias.


En línea

La verdad nos hará libres
MCKSys Argentina


Desconectado Desconectado

Mensajes: 1.141


Diviérte crackeando, que para eso estamos!


Ver Perfil
Re: Sumar eax i ebx
« Respuesta #1 en: 21 Marzo 2010, 04:02 »

Hola!

Craseha porque debes pasarle un puntero a una cadena a MessageBox, y tu le estas pasando (como puntero) el valor 7. Osea, le estás diciendo a la función, que la cadena que quieres mostrar, se encuentra en la posición de memoria 7.

Una forma de lograr lo que quieres hacer, sería:

Código:
include 'win32ax.inc'
;incluimos la libreria de MASM
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib

;definimos una sección de datos donde guardaremos el resultado de la suma, pero convertido en cadena de caracteres
;esta sección contendrá los datos NO inicializados
.data?
miCadena db 0Ah dup (?)

;sección de datos inicializados
.data
tituloMensaje db "suma",0

.code
 
start:
        mov eax,2
        mov ebx,5
        add eax,ebx
        ;dwtoa convierte un DWORD en una cadena value to an ascii
        ;declaracion: dwtoa proc public uses esi edi dwValue:DWORD, lpBuffer:DWORD
        invoke dwtoa, eax, addr miCadena
        invoke MessageBoxA,0,addr miCadena,addr tituloMensaje,0
        invoke ExitProcess,0
 
.end start

Saludos!


En línea

---------------------
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: Sumar eax i ebx
« Respuesta #2 en: 21 Marzo 2010, 10:35 »

¡Gracias! Pero el problema es que quiero aprender FASM  :-\ y supongo que incluyendo MASM... hay alguna solución con sólo FASM?
En línea

La verdad nos hará libres
[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Sumar eax i ebx
« Respuesta #3 en: 21 Marzo 2010, 11:50 »

Código
include 'win32ax.inc'
 
.code
 
start:
       mov eax,2
       mov ebx,5
       add eax,ebx
 
       ;Guardo eax en la pila
       push eax
 
       ;Reservo memoria y guardo en puntero a esa memoria en ebx
       invoke GlobalAlloc,GPTR,1024
       mov ebx,eax
 
       ;Recupero eax de la pila
       pop eax
 
       ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena
       invoke wsprintfA,ebx,"%d",eax
 
       invoke MessageBoxA,0,ebx,"suma",0
       invoke ExitProcess,0
 
.end start


Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: Sumar eax i ebx
« Respuesta #4 en: 21 Marzo 2010, 13:03 »

Gracias... voy a probarlo con HeapAlloc.
En línea

La verdad nos hará libres
RAID-MAM

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: Sumar eax i ebx
« Respuesta #5 en: 22 Marzo 2010, 03:21 »

Código
include 'win32ax.inc'
 
.code
 
start:
       mov eax,2
       mov ebx,5
       add eax,ebx
 
       ;Guardo eax en la pila
       push eax
 
       ;Reservo memoria y guardo en puntero a esa memoria en ebx
       invoke GlobalAlloc,GPTR,1024
       mov ebx,eax
 
       ;Recupero eax de la pila
       pop eax
 
       ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena
       invoke wsprintfA,ebx,"%d",eax
 
       invoke MessageBoxA,0,ebx,"suma",0
       invoke ExitProcess,0
 
.end start


Saludos

y la pila te la metes por el orto ? :P :xD

Restaura la pila luego del wsprintf con cinvoke en ves de invoke .

Mucha memoria para un numero que cabe en 2 bytes y luego no usas GLobalFree :S
En línea
[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Sumar eax i ebx
« Respuesta #6 en: 22 Marzo 2010, 06:39 »

y la pila te la metes por el orto ? :P :xD

Restaura la pila luego del wsprintf con cinvoke en ves de invoke .

Mucha memoria para un numero que cabe en 2 bytes y luego no usas GLobalFree :S

No tiene sentido liberar memoria si nanosegundos despues haces un ExitProcess  :¬¬ :¬¬ :¬¬ .

Lo de la pila tienes razón:

Citar
Note  It is important to note that wsprintf uses the C calling convention (_cdecl), rather than the standard call (_stdcall) calling convention. As a result, it is the responsibility of the calling process to pop arguments off the stack, and arguments are pushed on the stack from right to left. In C-language modules, the C compiler performs this task.

Código
include 'win32ax.inc'
 
.code
 
start:
       ;Reservo memoria y guardo en puntero a esa memoria en ebp
       ;¬¬'
       sub esp,2
       mov ebp,esp
 
       mov eax,2
       mov ebx,5
       add eax,ebx
 
       ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena
       invoke wsprintfA,ebp,"%d",eax
       ;¬¬'
       add esp,0x0C
 
       invoke MessageBoxA,0,ebp,"suma",0
       add esp,2
       ret
.end start
 

Saludos



« Última modificación: 22 Marzo 2010, 06:41 por Hacker_Zero » En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
RAID-MAM

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: Sumar eax i ebx
« Respuesta #7 en: 25 Marzo 2010, 01:14 »

y el pobre EBP no los restauras ?  :laugh:

No lo digo por el codigo si no por si copia el pedazito de codigo  ;-)
En línea
[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Sumar eax i ebx
« Respuesta #8 en: 26 Marzo 2010, 22:45 »

y el pobre EBP no los restauras ?  :laugh:

No lo digo por el codigo si no por si copia el pedazito de codigo  ;-)

NO!, me gusta ebp sin restaurar  >:(  :xD
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sumar productos sin talla
Desarrollo Web
nobo 2 55 Último mensaje 12 Febrero 2012, 14:24
por nobo
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines