Foro de elhacker.net

Programación => 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
  1. section .text
  2.    global _start ;must be declared for linker (ld)
  3.  
  4. _start: ;tell linker entry point
  5.  
  6. mov edx,len ;message length
  7. mov ecx,msg ;message to write
  8. mov ebx,1 ;file descriptor (stdout)
  9. mov eax,4 ;system call number (sys_write)
  10. int 0x80 ;call kernel
  11.  
  12. mov eax,1 ;system call number (sys_exit)
  13. int 0x80 ;call kernel
  14.  
  15. section .data
  16.  
  17. msg db 'Hello, world!',0xa ;our dear string
  18. 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
  1. msg db 'Hello, world!',10,13,"Nueva cadena en otra linea",10
  2.  

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
No se si te entendi bien , pero podrias poner :
Código
  1. msg db 'Hello, world!',10,13,"Nueva cadena en otra linea",10
  2.  

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
  1. msg db 'Hello, world!',13,10
  2. msg2 db   "Nueva cadena en otra linea",13,10
  3. 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
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
  1. msg db 'Hello, world!',13,10
  2. msg2 db   "Nueva cadena en otra linea",13,10
  3. 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
  1. len   equ   $ - msg
  2.  
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
  1. mov edx,len ;message length
  2. 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
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  ::)