Test Foro de elhacker.net SMF 2.1

Programación => Programación General => ASM => Mensaje iniciado por: Debci en 8 Noviembre 2009, 21:43 PM

Título: Duda sobre e
Publicado por: Debci en 8 Noviembre 2009, 21:43 PM
Amigos tengo una duda existencial, me gustaria saber como poner dos cadenas de texto en consola, se como se hace con una, que seria algo asi:
Código (asm) [Seleccionar]
section .text
    global _start ;must be declared for linker (ld)

_start: ;tell linker entry point

mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel

mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel

section .data

msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string

Como podria poner 2?
Saludos
Título: Re: Duda sobre e
Publicado por: YST en 8 Noviembre 2009, 21:46 PM
No se si te entendi bien , pero podrias poner :
Código (asm) [Seleccionar]

msg db 'Hello, world!',10,13,"Nueva cadena en otra linea",10


Eso te escribiria en una segunda linea la segunda cadena
Título: Re: Duda sobre e
Publicado por: Debci en 8 Noviembre 2009, 21:59 PM
Cita de: YST en  8 Noviembre 2009, 21:46 PM
No se si te entendi bien , pero podrias poner :
Código (asm) [Seleccionar]

msg db 'Hello, world!',10,13,"Nueva cadena en otra linea",10


Eso te escribiria en una segunda linea la segunda cadena
Y esos numeros? 10,13, cadena2,10?
que son?
Y como se podria hacer en dos definiciones distintas?

Saludos
Título: Re: Duda sobre e
Publicado por: YST en 8 Noviembre 2009, 22:04 PM
El 13,10 vendria a ser comop el "\n" de C o de PHP :P Hacen un salto de linea


La verdad tambien podria ser
Código (asm) [Seleccionar]

msg db 'Hello, world!',13,10
msg2 db   "Nueva cadena en otra linea",13,10
len equ $ - msg



PD : Me equivoque en el primer post es 13,10 no 10,13
Título: Re: Duda sobre e
Publicado por: Debci en 8 Noviembre 2009, 22:09 PM
Cita de: YST en  8 Noviembre 2009, 22:04 PM
El 13,10 vendria a ser comop el "\n" de C o de PHP :P Hacen un salto de linea


La verdad tambien podria ser
Código (asm) [Seleccionar]

msg db 'Hello, world!',13,10
msg2 db   "Nueva cadena en otra linea",13,10
len equ $ - msg



PD : Me equivoque en el primer post es 13,10 no 10,13
Bien gracias, y para que serviria el len   equ   $ - msg?
Y no habria que añadir en la parte de arriva del codigo alguna referencia al nuevo mensaje?

Saludos
Título: Re: Duda sobre e
Publicado por: YST en 8 Noviembre 2009, 22:41 PM
Lo que hace
Código (asm) [Seleccionar]

len   equ   $ - msg

es hacer que "len" tenga la cantidad de bytes desde msg hasta la posicion donde esta escritor el len equ $-msg , se entiende ?

No es necesario poner el msg2 ya que en len esta incluido ( ya que esta entre msg y len ) y tu lo que haces al escribir
Código (asm) [Seleccionar]

mov edx,len ;message length
mov ecx,msg ;message to write


Es decirle que escriba len bytes que estan luego desde la posición msg :P
Título: Re: Duda sobre e
Publicado por: Eternal Idol en 8 Noviembre 2009, 23:34 PM
Si queres hacerlo por separado mira el codigo original: sys_write es la clave (en las 5 primeras lineas se hace la escritura). Lo que queres hacer es llamar a la funcion write para que escriba en la consola otra vez.
Título: Re: Duda sobre e
Publicado por: Debci en 9 Noviembre 2009, 21:59 PM
Cita de: Eternal Idol en  8 Noviembre 2009, 23:34 PM
Si queres hacerlo por separado mira el codigo original: sys_write es la clave (en las 5 primeras lineas se hace la escritura). Lo que queres hacer es llamar a la funcion write para que escriba en la consola otra vez.
Gracias por vuestra ayuda!

Saludos
Título: Re: Duda sobre e
Publicado por: Eternal Idol en 9 Noviembre 2009, 22:03 PM
De nadas  ::)