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 General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  cast en asm
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: cast en asm  (Leído 1,847 veces)
rmdma()

Desconectado Desconectado

Mensajes: 17


mov eax,0x69


Ver Perfil
cast en asm
« en: 16 Febrero 2012, 11:14 am »

como puedo hacer para conertir un DWORD en un BYTE ?


Código
  1. include 'win32ax.inc'
  2.  
  3. .data
  4.        resultado dd ?
  5.        titulo    db 'Suma',0
  6.  
  7. .code
  8.        start:
  9.  
  10.            mov eax,2 ;
  11.            mov ebx,5 ;
  12.            mov [resultado], eax
  13.            add ebx,[resultado]
  14.  
  15.            push 0
  16.            push titulo
  17.            push resultado
  18.            push 0
  19.            call [MessageBoxA]
  20.  
  21.            push 0
  22.            call [ExitProcess]
  23.  
  24.  
  25. .end start    
  26.  
  27.  


lo que quiero es convertir la variable resultado en un BYTE para poder pasarsela como parametro a messageboxa, aer es sin mas estoy aprendiendo asm


En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.704


15 años en el foro.


Ver Perfil WWW
Re: cast en asm
« Respuesta #1 en: 16 Febrero 2012, 12:50 pm »

MessageBox no recibe como parametro un byte sino un puntero a byte, es decir una direccion de memoria donde haya una cadena de caracteres terminada en 0. En este ejemplo especifico lo que tenes que hacer no es pasar un byte con el 7 (que lo harias muy facilmente moviendo resultado a eax, en al tenes el primer byte aunque los parametros son todos DWORDs en pila, ojo) sino la cadena que incluye un '7' (como caracter, codigo ASCII 55) y un 0 terminador.

Para que te des una idea:

Código
  1. res_ascii db 16 dup(0)
  2.  
  3. .code
  4.        start:
  5.  
  6.    mov [res_ascii], '7'
  7.    mov [res_ascii+1], '1'
  8.    mov [res_ascii+2], '2'
  9.    mov [res_ascii+3], 0
  10.  
  11.            push 0
  12.            push titulo
  13.            push res_ascii
  14.            push 0
  15.            call [MessageBoxA]


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
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: cast en asm
« Respuesta #2 en: 16 Febrero 2012, 18:01 pm »

Hola, me parece que tienes un  error aqui:
Citar
 add ebx,[resultado]
es al reves.
Código:
add [resultado], ebx

Luego, resultado es un dword. MessageBox puede imprimir cadenas. Para eso tendrias que convertir de DWORD a STRING de alguna u otra manera.

Una opcion facil, es usar la api de windows, la funcion wsprintf.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms647550(v=vs.85).aspx
(se parece al printf de c)

Acordate que esta funcion no es STDCALL, despues de hacer el call, tienes que limpiar la pila de los parametros que hiciste push.

Código
  1. .data
  2.        resultado dd  0
  3.        szInt db '%i',0
  4.        str_resultado db 24 dup ?
  5.  
  6.  
  7. .code
  8.        start:
  9.            mov [resultado], 7
  10.            ;
  11.            push [resultado]
  12.            push szInt
  13.            push str_resultado
  14.            call [wsprintf]
  15.            add esp, 12 ;wsprintf es cdecl, 3 parametros = 3 * 4bytes = 12.
  16.            ;
  17.            ;listo, ahora str_resultado es un puntero a una cadena.
  18.  

Saludos.
« Última modificación: 16 Febrero 2012, 18:05 pm por _Enko » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
roms de drem cast
Juegos y Consolas
DANIELC01 2 1,280 Último mensaje 8 Enero 2005, 04:26 am
por STRIKE
Utilizar un cast en c#
.NET (C#, VB.NET, ASP)
joalbela 3 3,261 Último mensaje 16 Marzo 2011, 20:34 pm
por Novlucker
cast parametro null « 1 2 »
Programación Visual Basic
neo_from_cs_matrix 14 3,798 Último mensaje 6 Marzo 2012, 02:44 am
por Karcrack
Como crear un nuevo cast explicito en c#?
.NET (C#, VB.NET, ASP)
WHK 2 1,757 Último mensaje 17 Julio 2013, 22:57 pm
por WHK
Win32 Cast Error
Programación C/C++
XKC 0 307 Último mensaje 2 Agosto 2018, 13:10 pm
por XKC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines