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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  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 7,062 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 am »

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
  1. include 'win32ax.inc'
  2.  
  3. .code
  4.  
  5. start:
  6.        mov eax,2
  7.        mov ebx,5
  8.        add eax,ebx
  9.  
  10. invoke MessageBoxA,0,eax,"suma",0
  11. invoke ExitProcess,0
  12.  
  13. .end start


¿Alguna solución?

Muchas gracias.


En línea

La verdad nos hará libres
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


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

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 am »

¡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.082


CALL DWORD PTR DS:[0]


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

Código
  1. include 'win32ax.inc'
  2.  
  3. .code
  4.  
  5. start:
  6.        mov eax,2
  7.        mov ebx,5
  8.        add eax,ebx
  9.  
  10.        ;Guardo eax en la pila
  11.        push eax
  12.  
  13.        ;Reservo memoria y guardo en puntero a esa memoria en ebx
  14.        invoke GlobalAlloc,GPTR,1024
  15.        mov ebx,eax
  16.  
  17.        ;Recupero eax de la pila
  18.        pop eax
  19.  
  20.        ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena
  21.        invoke wsprintfA,ebx,"%d",eax
  22.  
  23.        invoke MessageBoxA,0,ebx,"suma",0
  24.        invoke ExitProcess,0
  25.  
  26. .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 pm »

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 am »

Código
  1. include 'win32ax.inc'
  2.  
  3. .code
  4.  
  5. start:
  6.        mov eax,2
  7.        mov ebx,5
  8.        add eax,ebx
  9.  
  10.        ;Guardo eax en la pila
  11.        push eax
  12.  
  13.        ;Reservo memoria y guardo en puntero a esa memoria en ebx
  14.        invoke GlobalAlloc,GPTR,1024
  15.        mov ebx,eax
  16.  
  17.        ;Recupero eax de la pila
  18.        pop eax
  19.  
  20.        ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena
  21.        invoke wsprintfA,ebx,"%d",eax
  22.  
  23.        invoke MessageBoxA,0,ebx,"suma",0
  24.        invoke ExitProcess,0
  25.  
  26. .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.082


CALL DWORD PTR DS:[0]


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

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
  1. include 'win32ax.inc'
  2.  
  3. .code
  4.  
  5. start:
  6.        ;Reservo memoria y guardo en puntero a esa memoria en ebp
  7.        ;¬¬'
  8.        sub esp,2
  9.        mov ebp,esp
  10.  
  11.        mov eax,2
  12.        mov ebx,5
  13.        add eax,ebx
  14.  
  15.        ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena
  16.        invoke wsprintfA,ebp,"%d",eax
  17.        ;¬¬'
  18.        add esp,0x0C
  19.  
  20.        invoke MessageBoxA,0,ebp,"suma",0
  21.        add esp,2
  22.        ret
  23. .end start
  24.  

Saludos



« Última modificación: 22 Marzo 2010, 06:41 am 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 am »

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.082


CALL DWORD PTR DS:[0]


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

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 2,218 Último mensaje 12 Febrero 2012, 14:24 pm
por nobo
Sumar variables
PHP
z3nth10n 8 4,409 Último mensaje 7 Junio 2012, 20:55 pm
por z3nth10n
[Soporte rápido] Sumar ID consecutiva.
Desarrollo Web
z3nth10n 2 2,571 Último mensaje 6 Julio 2012, 16:21 pm
por z3nth10n
Sumar dos Textbox « 1 2 »
.NET (C#, VB.NET, ASP)
SγиtαxEяяoя 11 12,716 Último mensaje 14 Junio 2013, 08:20 am
por Eleкtro
Sumar horas más de 24 en access
Programación Visual Basic
hispapo 2 7,052 Último mensaje 3 Agosto 2013, 11:14 am
por hispapo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines