Test Foro de elhacker.net SMF 2.1

Programación => Programación General => ASM => Mensaje iniciado por: Drewermerc en 3 Mayo 2014, 22:15 PM

Título: errores al compilar asm
Publicado por: Drewermerc en 3 Mayo 2014, 22:15 PM
hola a todos.
bueno apenas estoy empesando con programacion asm y bueno quise compilar.

Código (asm) [Seleccionar]

.MODEL SMALL

Stack SEGMENT STACK 'STACK'
DB 200h DUP(?)
Stack ENDS

Data SEGMENT 'DATA'
strMensaje db   "hola mundo", 10, 13, "$"
strMensajedos db "este es otro mensaje", 10, 13, "$"
Data ENDS

Code SEGMENT 'CODE'
ASSUME CS:Code, DS:Data, SS:Stack


Inicio PROC
mov ax,data
mov ds,ax
mov dx,offset strMensajedos
int 21h
mov dx,offset strMensajedos
int 21h
mov ax, 4c00h
int 21h
Inicio ENDP
Code ENDS
END Inicio




cuando lo compilo en windows 8 x64 me salen estos errores y warnings:
C:\nasm-2.11.02\prog>yasm-1.2.0-win64.exe -f win64 -o c:\nasm-2.11.02\prog\uno.asm.o  c:\nasm-2.11.02\prog\uno.asm
c:\nasm-2.11.02\prog\uno.asm:3: warning: Unrecognized string qualifier
c:\nasm-2.11.02\prog\uno.asm:4: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:10: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:13: error: junk at end of line, first unrecognized character is `:'
c:\nasm-2.11.02\prog\uno.asm:13: warning: `DS' segment register ignored in 64-bit mode
c:\nasm-2.11.02\prog\uno.asm:13: warning: `SS' segment register ignored in 64-bit mode
c:\nasm-2.11.02\prog\uno.asm:16: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:17: error: undefined symbol `data' (first use)
c:\nasm-2.11.02\prog\uno.asm:17: error:  (Each undefined symbol is reported only once.)
c:\nasm-2.11.02\prog\uno.asm:18: warning: `ds' segment register ignored in 64-bit mode
c:\nasm-2.11.02\prog\uno.asm:19: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:19: error: undefined symbol `offset' (first use)
c:\nasm-2.11.02\prog\uno.asm:29: error: instruction expected after label
c:\nasm-2.11.02\prog\uno.asm:30: error: instruction expected after label

C:\nasm-2.11.02\prog>

y cuando compilo en winxp me sale esto.
C:\nasm>nasm.exe -f win32 -o c:\prog\dos.exe c:\prog\dos.asm
c:\prog\dos.asm:1: error: attempt to define a local label before any non-local l
abels
c:\prog\dos.asm:1: error: parser: instruction expected
c:\prog\dos.asm:4: error: comma expected after operand 1
c:\prog\dos.asm:5: error: symbol `Pila' redefined
c:\prog\dos.asm:5: error: parser: instruction expected
c:\prog\dos.asm:9: error: symbol `Datos' redefined
c:\prog\dos.asm:9: error: parser: instruction expected
c:\prog\dos.asm:12: error: parser: instruction expected
c:\prog\dos.asm:14: error: parser: instruction expected
c:\prog\dos.asm:18: error: comma, colon, decorator or end of line expected after
operand
c:\prog\dos.asm:23: error: symbol `Inicio' redefined
c:\prog\dos.asm:23: error: parser: instruction expected
c:\prog\dos.asm:24: error: symbol `Codigo' redefined
c:\prog\dos.asm:24: error: parser: instruction expected
c:\prog\dos.asm:25: error: parser: instruction expected

C:\nasm>

tambien ya intente hacer primero el archivo .o y despues el .exe pero al intentar crear el .o mesalen los mismos errores.
bueno espero que me pueda ayudar saludos Drewermerc.
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 3 Mayo 2014, 22:30 PM
Esos son errores al ensamblar pero igual hay otro problema de concepto, ese codigo es de 16 bits para MS-DOS y vos estas intentando usar un ensamblador de 64/32 bits para Windows. Ademas hay que tener en cuenta que cada ensamblador tiene una sintaxis y no necesariamente soporta la de otros ...
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 4 Mayo 2014, 01:10 AM
hola Eternal Idol.
gracias por responder.

bueno pues ya pude compilar pero en linux cuando intento compilar en windows ya sea 8 o xp el .o se crea bien pero al crear el .exe me dice lo siguiente:

primero creo el .o asi:
nasm -f elf64 -o c:\nasm-2.11.02\hola2.o c:\nasm-2.11.02\hola2.nasm
despues al crear el .exe me da ese error:
ldrdf.exe -o c:\nasm-2.11.02\hola2.exe  c:\nasm-2.11.02\hola2.o
ldrdf:c:\nasm-2.11.02\hola2.o: invalid file format

tambien quisiera que me ayudaras con estas dudas.
1.-queria saber por que algunos tutoriales en internet compilar asm de 16bist en win7.
2.-si compilo asm de x32 este funcionara en cualquier sistema x32.
3.-si compilo asm x32 funcionara en x64 o tengo que programarlo especialmente para x64.
4.-bueno por ultimo qusiera saber si entonces ya no se usa asm de 16bits.

bueno gracias de nuevo espero que me puedas ayudar.
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 4 Mayo 2014, 01:28 AM
Cita de: Drewermerc en  4 Mayo 2014, 01:10 AMbueno pues ya pude compilar pero en linux cuando intento compilar en windows ya sea 8 o xp el .o se crea bien pero al crear el .exe me dice lo siguiente:

Me sorprende bastante que lo hayas podido ensamblar (no compilar) en Linux, tal vez estes equivocado ... igual es imposible que funcione el ejecutable ya que usa los servicios propios de MS-DOS (los de la interrupcion 21h).

Cita de: Drewermerc en  4 Mayo 2014, 01:10 AM1.-queria saber por que algunos tutoriales en internet compilar asm de 16bist en win7.
2.-si compilo asm de x32 este funcionara en cualquier sistema x32.
3.-si compilo asm x32 funcionara en x64 o tengo que programarlo especialmente para x64.
4.-bueno por ultimo qusiera saber si entonces ya no se usa asm de 16bits.

En las versiones de 32 bits de Windows modernas todavia se pueden ejecutar programas de 16 bits.

Si ensamblas un programa de 32 bits para el procesador x86 funcionara en cualquier S.O. que soporte el formato de ejecutable ... es decir nativamente un programa para Windows funcionara en Windows.

Los procesadores de x64 tiene un modo de compatibilidad con x86, Windows lo usa por ejemplo.

Muy poco, todos los S.O.s modernos trabajan en 32 y 64 bits.
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 4 Mayo 2014, 01:43 AM
hola si tienes razon es ensamblar y bueno es que creo que se me olvido mencionar que pude compilar pero encontrado el codigo para x32 y x64.
mira este es el codigo de x32.
entonces no saber a que se debera el error que me da al tratar de generar el .exe
Código (asm) [Seleccionar]

global _start            ; global entry point export for ld

section .text
_start:

    ; sys_write(stdout, message, length)

    mov eax, 4        ; sys_write syscall
    mov ebx, 1        ; stdout
    mov ecx, message    ; message address
    mov edx, length        ; message string length
    int 80h

    ; sys_exit(return_code)

    mov eax, 1        ; sys_exit syscall
    mov ebx, 0        ; return 0 (success)
    int 80h

section .data
    message: db 'Hello, world!',0x0A    ; message and newline
    length: equ $-message            ; NASM definition pseudo-instruction

Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 4 Mayo 2014, 02:08 AM
La clave estaba aca:
Si ensamblas un programa de 32 bits para el procesador x86 funcionara en cualquier S.O. que soporte el formato de ejecutable ... es decir nativamente un programa para Windows funcionara en Windows.

Con ese codigo no podes generar un .exe (PE (http://en.wikipedia.org/wiki/Portable_Executable)) para Windows, es un ELF (http://en.wikipedia.org/wiki/Executable_and_Linkable_Format) para Linux (usa los servicios propios de este S.O., los de la interrupcion 080h) como le pasas de argumento. Y obviamente Windows no soporta nativamente un ELF ...

PD. x32 no existe, hay 32 bits, 64 bits, x86, x64, mira en Wikipedia.
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 4 Mayo 2014, 02:37 AM
gracias por la aclaracion.
entonces programar esm en linux y wndows es diferente.
nose si tengas un tutorial o alguna informacion sobre programacion de asm de 32bits en windows y lunux es que no encuentro nada que me funcione y encuentro casi pura informacion de 16bits.
y bueno nose si sepas es que tambien e queri probar con masm pero al instalar me dice que nesesito tener microsoft visual studio c++ express redistributable 2005.
espeor que me puedas ayudar.
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 4 Mayo 2014, 11:25 AM
Si, es diferente, cada S.O. provee unos servicios y una forma de acceder a ellos.

En los temas con chincheta de este subforo tenes toda la informacion que queres, en este por ejemplo esta el enlace a los tutoriales de Iczelion:
http://foro.elhacker.net/asm/entry_point-t256455.0.html

El redistributable lo podes bajar de Internet facilmente, buscalo en Google, es redistribuible como su nombre lo indica.

http://blogs.msdn.com/b/nikolad/archive/2006/04/11/download-location-for-vcredist.aspx
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 4 Mayo 2014, 16:37 PM
holagracias pro responder.
nose si sepas de alguna otra paguian por que los intente descargar pero ningun link funciona todo dicen error file no found.
bueno espero que me puedas ayudar.
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 4 Mayo 2014, 16:58 PM
¿El redistributable?

http://www.microsoft.com/es-es/search/DownloadResults.aspx?q=Microsoft+Visual+C%2b%2b+2005+Redistributable+Package

¿Los tutoriales de Iczelion?

http://win32assembly.programminghorizon.com/tutorials.html
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 4 Mayo 2014, 19:45 PM
muchas gracias eternal idol.
esta muy interesante los tutos y bueno pues ya pude ensamblar.
bueno quisiera preguntarte lo siguiente.
1.-¿se puede ensamblar el codigo de masm en nasm?
2.-¿quisera saber si cuales la estructura para imprimir por consola es que quisiera saber hacerlo tanto en consola como por gui?
3-¿todos los programas sigues esta sintaxis como la de los tutos que me pasate o cambia?
4.-como quiero aprender asm para despues inciarme en ingieneria inversa quisiera saber si ¿aprendiendo a ensamblar de este modo despues podria intepretar cualquier programa desensamblado?
por que e visto que loscodigo se pueden pueden esribir diferente pero hacen lo mismo o solo con la experencia ire dandoe de todos esos detalles.
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 4 Mayo 2014, 19:58 PM
Que yo sepa, no, aunque no use mas que un par de veces NASM:
http://www.nasm.us/doc/nasmdoc2.html#section-2.2

Hay que usar la API de Windows: GetStdHandle con STD_OUTPUT_HANDLE y WriteConsole.

No se a que sintaxis en particular te referis, esos tutoriales son para MASM ...

Si, las diferencias no son tan grandes como para no entender un codigo.
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 5 Mayo 2014, 00:59 AM
hola gracia spor la respuestas.
bueno pues estuve buscando lo que me dijiste y encontre este ejemplo y me compila pero cuando lo ejecuto no imprime nada nose si me podrias ayudar a correjirlo y acompletarlo para que lea datos y lo buelba a imprimir y s i no es mucha molestia que me digas como funciona el codigo que agreges.


.386

.model flat,stdcall

option casemap:none


include \masm32\include\windows.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\kernel32.lib 

.data
;se declara la variable con el texto hello world con salto de linea y final de cadena
output db "Hello World!", 0ah, 0h 

.code
start:

;le indicamos que seba a usar el estandar de salida
; getstdhandle como tiene tres  tipos de opcion y aqui se indica que se usara el de salida
invoke GetStdHandle, STD_OUTPUT_HANDLE
;aqui es la linea que no entiendo bien se que se escribe en la patalla con writeconsole  y se supone que eax es un acumulador se guarda hay y luego nose por que usan sizeof ebx y NULL
invoke WriteConsole, eax, addr output, sizeof output, ebx, NULL

invoke ExitProcess, 0

end start


bueno espero que me puedas ayudar y gracias de nuevo y si me equivoco en algo corregeme porfavor.
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 5 Mayo 2014, 01:13 AM
En el registro EAX esta el valor de retorno de GetStdHandle. sizeof calcula el tamaño de la cadena en cuestion. No entiendo la razon de usar EBX en ese contexto. ¿Cual es su valor? Es indefinido y ahi tenes que poner un puntero a un DWORD:

 _Out_       LPDWORD lpNumberOfCharsWritten,
lpNumberOfCharsWritten [out]
   A pointer to a variable that receives the number of characters actually written.

Código (asm) [Seleccionar]
.data
...
written dd 0
...
invoke WriteConsole, eax, addr output, sizeof output, offset written, NULL


Todo esto es basicamente uso de la API de Windows, no esta relacionado con assembly necesariamente, asi que primero busca en la MSDN la documentacion de las funciones de consola y practica con C/C++ si tenes problemas.
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 5 Mayo 2014, 06:59 AM
hola Eternal Idol.
bueno gracias entonces revisar los tutoriales y me pondre en practica gracias por todo nos vemos saludos.
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 5 Mayo 2014, 09:54 AM
De nadas, con el arreglo del EBX ya deberia funcionar (ejecuta el programa desde cmd sino se te va a cerrar la consola automaticamente sin ver nada).
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 5 Mayo 2014, 21:00 PM
hola perdon pero no teentendi bien eso de con el arreglo ebx deberia de funciona.
nose si me pueda explicar.
y bueno si cuando ejecuto el programa no me muestra nada segun y buscando encontre que me faltaba iniciar el stout con allocConsole yahora si me habre rapido la consola y segun yo el codigo queda asi.

Código (asm) [Seleccionar]

.386

.model flat,stdcall

option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib 

.data
;se declara la variable con el texto hello world con salto de linea y final de cadena
output db "Hello World!", 0ah, 0h 
;data
;written dd 10
.code
start:
  invoke AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE

invoke WriteConsole, eax, addr output, sizeof output, offset written, NULL
invoke ExitProcess, 0

end start
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 5 Mayo 2014, 21:09 PM
Si el SUBSYSTEM es CONSOLE no hace falta llamar a AllocConsole, y en este caso deberia serlo. Asi genere el ejecutable yo:
ml /Cp /coff console.asm /link /subsystem:console

Ahora con ejecutarlo desde cmd.exe (tecla de Windows + R, cmd) deberias ver la cadena.

PD. Ahi en tu codigo tenes comentado written por ejemplo.
Título: Re: errores al compilar asm
Publicado por: Drewermerc en 5 Mayo 2014, 21:39 PM
hola si es cierto mi error fue que yo al momento de likear lo ponia asi.
SYSTEM:WINDOWS
Y ERA COMO TU ME DIJISTE
SYSTEM:CONSOLE.

muchas gracias nos vemos saludo.
Título: Re: errores al compilar asm
Publicado por: Eternal Idol en 5 Mayo 2014, 21:41 PM
De nadas  ::)