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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  (Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit  (Leído 3,752 veces)
HelloWorldCodigo

Desconectado Desconectado

Mensajes: 5


Ver Perfil
(Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
« en: 23 Agosto 2015, 23:28 pm »

Hola a todos y a todas. El problema que tengo es que al ensamblar un código con NASM con la etiqueta -fwin32 no puede ser ejecutado según Windows a 64 bits. No he probado la aplicación en modo 32 bits (no tengo ningún ordenador de 32 bits), así que no sé si es problema del código.

Código
  1. STD_OUTPUT_HANDLE   equ -11
  2. STD_INPUT_HANDLE   equ -10
  3. NULL               equ 0
  4.  
  5. global start
  6. extern ExitProcess, GetStdHandle, WriteConsoleA, ReadConsoleInputA
  7.  
  8. section .data    ;message we want to display on console
  9. msg                 db "Press a key to continue...", 13, 10, 0
  10. msg.len             equ $ - msg
  11. consoleInHandle     dd 1
  12.  
  13. section .bss     ;buffers declaration
  14. buffer_out          resd 2
  15. buffer_in           resb 32
  16.  
  17. section .text
  18.    start:       ;starting point of our program
  19.        push    STD_OUTPUT_HANDLE
  20.        call    GetStdHandle   ;call to get a handle to the
  21.        push    NULL           ;specified mode (input, output...)
  22.        push    buffer_out
  23.        push    msg.len
  24.        push    msg
  25.        push    eax            ;contains the GetStdHandle result
  26.        call    WriteConsoleA  ;call to print our msg in console
  27.  
  28.    read:
  29.        push    STD_INPUT_HANDLE
  30.        call    GetStdHandle        ;new call to get input handle
  31.        push    NULL
  32.        push    1
  33.        push    buffer_in
  34.        push    eax
  35.        call    ReadConsoleInputA   ;call to detect user input
  36.                                    ;this function will wait til
  37.    exit:                           ;it detects enough keypresses
  38.        push    NULL                ;(in this case, 1)
  39.        call    ExitProcess

Este es el comando que he usado:
nasm -fwin32 main.asm -o main.exe


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: (Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
« Respuesta #1 en: 23 Agosto 2015, 23:37 pm »

Hola!

No responderé a tu pregunta principal, pues no manejo bien nasm.

Pero para ésto:

... No he probado la aplicación en modo 32 bits (no tengo ningún ordenador de 32 bits), así que no sé si es problema del código...

puedes usar una máquina virtual. VirtualBox es gratis y fácil de usar. Si vas a hacer desarrollos, te conviene tener al menos 1 VM por cada target que quieras.

Saludos!


En línea

MCKSys Argentina

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

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


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


Ver Perfil WWW
Re: (Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
« Respuesta #2 en: 23 Agosto 2015, 23:47 pm »

Windows de 64 bits ejecuta programas de 32 bits. El problema es que no estas generando ningun programa en lo absoluto ... apenas llegaste al codigo objeto, necesitas enlazar.
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
HelloWorldCodigo

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: (Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
« Respuesta #3 en: 23 Agosto 2015, 23:53 pm »

¿Y cómo puedo enlazar? Se supone que no necesito usar C Standard
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: (Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
« Respuesta #4 en: 24 Agosto 2015, 00:02 am »

Con un enlazador, yo uso el de Microsoft (link.exe). Hay que aprender a buscar:
http://forum.codecall.net/topic/65222-intro-to-win32-assembly-using-nasm-part-1/

Si queres que te ayuden mejor usa MASM como casi todo el mundo que programa en assembly para Windows.

PD. El cuarto y ultimo parametro de ReadConsoleInputA no puede ser nulo, tiene que ser un puntero a DWORD.
« Última modificación: 24 Agosto 2015, 00:06 am por Eternal Idol » 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
HelloWorldCodigo

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: (Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
« Respuesta #5 en: 24 Agosto 2015, 00:05 am »

He intentado esto encontrado en la web, pero nasm me da un error:

Código
  1. extern GetStdHandle
  2. extern WriteConsoleA
  3. extern ReadConsoleInputA
  4. extern ExitProcess
  5.  
  6. import GetStdHandle kernel32.dll
  7. import ExitProcess kernel32.dll
  8. import WriteConsoleA kernel32.dll
  9. import ReadConsoleInputA kernel32.dll

El error junto al comando son los siguientes:
nasm -fwin32 main.asm -o main.exe
main.asm:10: error: parser: instruction expected
main.asm:11: error: symbol `import' redefined
main.asm:11: error: parser: instruction expected
main.asm:12: error: symbol `import' redefined
main.asm:12: error: parser: instruction expected
main.asm:13: error: symbol `import' redefined
main.asm:13: error: parser: instruction expected

También he probado este comando y me sale el mismo error:
nasm main.asm -o main.exe
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: (Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
« Respuesta #6 en: 24 Agosto 2015, 00:20 am »

Si vas a seguir copiando y pegando codigo sin entender nada hasta lograrlo hacelo pero no preguntes a cada paso que des por favor, ya lo estas haciendo en otros lados ademas.

Con el codigo original, que te va a dar una excepcion a menos que arregles la llamada a ReadConsoleInputA, baja el golink:
GoLink.exe /console /entry:start main.obj kernel32.dll


http://therobpoint.blogspot.com/2012/11/asm-how-to-use-windows-api-in-nasm.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
¿un ordenador puede soportar simultaneamente SO a 64 bits y 32 bits??
Windows
Vjuan_ 5 7,405 Último mensaje 30 Septiembre 2012, 21:43 pm
por aklamath
¿Se puede instalar Windows 7 64 bits sobre Win-7 32 bits?
Windows
nony1946 8 55,526 Último mensaje 4 Junio 2011, 13:52 pm
por Randomize
RAM maxima que puede usar un programa de 32 bits « 1 2 »
Windows
crazykenny 10 7,414 Último mensaje 7 Julio 2011, 00:55 am
por raquel1020
¿UNIX® puede correr en una pc de normal de 32 bits?
Unix/Unix-Like
bacanzito 6 5,089 Último mensaje 15 Septiembre 2013, 19:07 pm
por Epzylon
¿Qué puede aportar una tableta con 64 bits?
Noticias
wolfbcn 1 1,424 Último mensaje 29 Noviembre 2013, 11:23 am
por survivor_evil
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines