• Domingo 22 de Diciembre de 2024, 09:08

Autor Tema:  Usando Sys_read  (Leído 2505 veces)

_elhaz_

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Usando Sys_read
« en: Miércoles 13 de Diciembre de 2006, 08:03 »
0
Saludos, este es mi primer post en este foro, y espero hacerlo bien.

la duda que tengo, es como puedo utilizar esta syscall de linux utilizando asm con sintaxis at&t
ya se q se puede hacer una llamada a scanf y todo muy facil.
simplemente quiero aprender

al hacer un man read
la sinopsis es esta:

 ssize_t read(int fd, void *buf, size_t nbytes);

pues si, fd, el descriptor, osea 0 para stdin, void *buf, supongo q sera la variable q almacenara
lo q entra por stdin, no se si estare muy perdido, la duda me llega con el ultimo argumento, size_t nbytes
se supone q es la longitud de lo q se pasa con stdin, pero como lo calculo :S
e ahi el problema y la mayor duda

intente algo como:

.data
x:  .int 0
lx = . -x
.text
   .globl _start
_start:
   movl $lx, %ebx
   movl $x, %ecx
   movl $0, %ebx
   movl $3, %eax
   int $0x80
   
salir:   movl $1, %eax
   int $0x80

si ensambla y enlaza bien. pero no da..
muchas gracias por la ayuda :)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Usando Sys_read
« Respuesta #1 en: Miércoles 13 de Diciembre de 2006, 08:15 »
0
fd como 0 es correcto (ebx), buf tiene que ser la direccion de memoria de comienzo de algun tipo de array (ecx) y nbytes es el tamaño de ese array (edx).

No uso sintaxis de AT&T pero creo que lo vas a entender:

Código: Text
  1.  
  2. ...
  3. section .bss
  4.   Nombre resb 256
  5. section .text
  6. main:
  7.     mov eax, 3
  8.     mov ebx, 0
  9.     mov ecx, Nombre
  10.     mov edx, 255
  11.     int 80h
  12. ...
  13.  
  14.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

_elhaz_

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Usando Sys_read
« Respuesta #2 en: Miércoles 13 de Diciembre de 2006, 19:04 »
0
Muchas gracias, funciona perfectamente, tanto en sintaxis intel como rn at&t
muchas gracias Eternal Idol

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Usando Sys_read
« Respuesta #3 en: Miércoles 13 de Diciembre de 2006, 19:24 »
0
De nadas  :kicking:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

_elhaz_

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Usando Sys_read
« Respuesta #4 en: Miércoles 13 de Diciembre de 2006, 19:38 »
0
una pequeña duda mas..
 :P

teniendo lo siguiente:

.data
nombre: .byte 255
.section .text
   .globl _start
_start:
   mov $255, %edx
   mov $nombre, %ecx
   mov $0, %ebx
   mov $3, %eax
   int $0x80
   
   mov (nombre),%ebx             #esto carga lo q hay en la dirección apuntada por  nombre
   mov $1, %eax
   int $0x80

el dato q se entra con stdin se supone q se guarda en nombre, no ?
al ejecutar el programa da lo siguiente:

~/Desktop$ ./stdinasm
5
~/Desktop$ echo $?
53

y con el debugger ald me muestra esto al mover el resultado a %ebx:

0804808A                      8B1D98900408         mov ebx, dword [+0x8049098]

eax = 0x00000002 ebx = 0x732E0A35 ecx = 0x08049098 edx = 0x000000FF
esp = 0xBFE89F70 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds  = 0x007B es  = 0x007B fs  = 0x0000 gs  = 0x0000
ss  = 0x007B cs  = 0x0073 eip = 0x08048090 eflags = 0x00200292

Flags: AF SF IF ID

no entiendo porq me carga una direccion de memoria :S
me podrian guiar un poco en esto ?
Gracias de antemano :)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Usando Sys_read
« Respuesta #5 en: Miércoles 13 de Diciembre de 2006, 20:48 »
0
Como te decia antes:
"buf tiene que ser la direccion de memoria de comienzo de algun tipo de array"

Mira que hay en esa direccion tanto antes como despues de la interrupcion, antes tiene que haber basura y despues lo que hayas leido del teclado.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

_elhaz_

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Usando Sys_read
« Respuesta #6 en: Miércoles 13 de Diciembre de 2006, 23:26 »
0
ok, gracias de nuevo, ya se me van aclarando varias cosas :hola:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Usando Sys_read
« Respuesta #7 en: Jueves 14 de Diciembre de 2006, 00:09 »
0
De nadas again  :ph34r:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.