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)
| | | |-+  Hola mundo en FASM
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hola mundo en FASM  (Leído 5,861 veces)
Erik#


Desconectado Desconectado

Mensajes: 1.138


Gundam


Ver Perfil
Hola mundo en FASM
« en: 6 Julio 2009, 13:10 pm »

No se si hay un hola mundo en fasm, pero es el que programo yo actualmente, y os quiero poner un hola mundo tanto con MessageBox como con printf.
+==============MESSAGEBOXA=============+

Código
  1. include 'win32ax.inc'
  2. .data
  3.    holatit db 'Hola Mundo',0
  4.    hola db 'Hola Mundo, un saludo',0
  5. .code
  6. start:
  7. push 0
  8. push hola
  9. push holatit
  10. push 0
  11. call [MessageBoxA]
  12. push 0
  13. call [ExitProcess]
  14. .end start

Primero declaramos la libreria con la que programaremos, en fasm es win32ax, puedes cambiar la dirección de la ruta según donde la tengas tu.
Despues abrimos el sector de código .data donde declararemos variables..
Declaramos dos variables del tipo string (db) y llenamos su contenido con comillas simples y ponemos un 0 al final.
Después abrimos el sector code donde escribiremos nuestro código y metemos start: para indicar el del comienzo del código, seguidamente usaremos la función MessageBoxA de win32.
Si os dais cuenta la sintaxis seria en otro lenguaje: MessageBox(0,hola,holatit,0);
El primer 0 corresponde al ultimo de por ejemplo en C, el holatit corresponde al titulo, el hola corresponde al mensaje a mostrar, y el ultimo 0 corresponde al primer 0 de la función en C(ejemplo).
Después invocaremos la función ExitProcess para acabar el code sin que nos salte errores.
Indicamos un 0 y después hacemos la llamada a ExitProcess.
La función call sirve para llamar a funciones o tambien se puede usar invoke.

+==============PRINTF===============+

Para usar printf invocaremos de diferentes librerias X función, se puede hacer al principio incluyendola o en el sector idata que a mi me parece más comodo, usaremos este ultimo.

Código
  1. format pe console
  2. entry start
  3. include 'win32ax.inc'
  4. .code
  5. start:
  6. invoke printf,'Hola Mundo'
  7. invoke getchar
  8. invoke ExitProcess,0
  9. section '.idata' import data readable
  10. library msvcrt,'msvcrt.dll',kernel32,'kernel32.dll'
  11. import msvcrt,printf,'printf',getchar,'_fgetchar'
  12. import kernel32,ExitProcess,'ExitProcess'

Primero comenzamos declarando que tipo de programa sera, podemos indicar GUI, console...
Después indicamos el entry start para comenzar el código de consola.
Seguidamente declaramos la libreria win32ax.
Ahora introducimos el sector de code para indicar que utilizaremos ya a programar código visible.
Ahora invocamos la función printf que posteriormente la declararemos y imprimimos Hola Mundo.
Ahora usamos la función getchar para pausar el proyecto y que podamos ver lo del printf.
Ahora utilizamos la función ExitProcess, para que no nos salte error.
Ahora utilizaremos section '.idata' import data readable para declarar dll y funciones.
Primero indicamos el nombre que les daremos para usar a las dll msvcrt y kernel32.
Ahora desde msvcrt importamos la función printf y le damos el nombre de printf y despues la función _fgetchar y le damos el nombre de getchar.
Y por utltimo desde la dll kernel32 importamos la función ExitProcess.


En línea

ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: Hola mundo en FASM
« Respuesta #1 en: 6 Julio 2009, 18:03 pm »

nada mas ten cuidado con las apis que utilicen la convencion cdecl porque necesitas equilibrar la pila despues de llamar la funcion. yo no acostumbro a usar invoke asi que no me acuerdo si te equilibra la pila. Solo tenlo en cuenta o puedes tener errores.


En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Hola mundo en FASM
« Respuesta #2 en: 7 Julio 2009, 09:44 am »

nada mas ten cuidado con las apis que utilicen la convencion cdecl porque necesitas equilibrar la pila despues de llamar la funcion. yo no acostumbro a usar invoke asi que no me acuerdo si te equilibra la pila. Solo tenlo en cuenta o puedes tener errores.
Con FASM si no me equivoco puedes llamarlas poniendo 'cinvoke' :D
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Hola mundo en FASM
« Respuesta #3 en: 7 Julio 2009, 09:48 am »

Es correcto lo que dice Karcrack, el codigo que use invoke con funciones cuya convencion de llamada sea C y tengan parametros jodera la pila.

"invoke in FASM is implemented as an external macro; as such, it cannot determine if the function being invoked is being called via import or directly, or if it's stdcall or c type (the PROTO directive is not used in FASM).
In other words, the invoke keyword in MASM, must be replaced in FASM with the appropriate macro:

● invoke (For stdcall function via import).
● cinvoke (For c function via import).
● stdcall (For direct call stdcall function).
● ccall (For direct call c function). "

http://www.winasm.net/what-is-fasm.html
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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Archivos .a y .o en un hola mundo
Programación C/C++
Rhertz 1 1,981 Último mensaje 20 Junio 2011, 16:37 pm
por El_Java
Descodificar hola mundo
Hacking
vicehacker 1 2,205 Último mensaje 21 Septiembre 2011, 23:38 pm
por Uxio
Error el codigo Hola mundo :/
ASM
x64core 5 7,083 Último mensaje 30 Octubre 2011, 22:19 pm
por Eternal Idol
Problema con Hola mundo y simple suma
Programación C/C++
avmiitxe 5 3,737 Último mensaje 13 Febrero 2012, 21:30 pm
por RyogiShiki
Crearle un diseño a el programa hola mundo.
Programación C/C++
elkiy 2 3,292 Último mensaje 9 Junio 2012, 04:31 am
por elkiy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines