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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Mi segundo programa en ASM
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mi segundo programa en ASM  (Leído 3,846 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Mi segundo programa en ASM
« en: 2 Abril 2010, 12:19 pm »

Hola a todos, esta vez he querido leer un caracter de stdin pero hay segmentation fault, es porque alamaceno lo leido en esi y no soy capaz de derteminar la length de este para darselo al sys_write, es basicamente un programa de echo:

Código
  1. section .text
  2.   global _start ;parida que necesita el linker xD
  3.  
  4. _start: ;entry point
  5.        pop ebx
  6.        pop ebx
  7.        pop ebx
  8.        pop ebx
  9.        mov eax,5
  10.        add     ebx,ecx
  11. mov edx,len ;Longitud del mensaje
  12. mov ecx,msg ;Mensaje que vamos a escribir
  13. mov ebx,1 ;file descriptor (stdout)
  14. mov eax,4 ;llama de sistema numero 4 (sys_write)
  15. int 80h ;call al kernel para que ejecute las sentencias
  16.        pushad ;Guardamos registros
  17.        pushfd ;Guardamos flags
  18.        mov     eax, 3 ;sys_read(3)
  19.        mov     ebx, 0 ;stdin (0)
  20.        mov     ecx, esi ;Guardamos la string en esi
  21.        mov     edx, 1 ;nnumero de bytes a leer
  22.        int     80h ;llamada al kernel de linux
  23.        popfd ;re-establecemos flags
  24.        popad ;re-establecemos registros
  25.        ret ;retorno para llamar al procedimiento
  26.  
  27.        mov edx,length2 ;longitud del mensaje
  28. mov ecx,esi ;mensaje a escribir
  29.        mov ebx,1 ;file descriptor (stdout)
  30.        mov eax,4 ;llamada a sistema numero 4 (sys_write)
  31. int 80h ;linux esta aqui!
  32.        mov     eax,1 ;llamada a sistema numero 1 (sys_exit)
  33. int 80h ;llamada al kernel, linux acabará con la ejecución del proceso
  34.  
  35.  
  36.  
  37. section .data
  38.  
  39. msg db 'Hola mundo!',10 ;la primera cadena
  40. mensaje2 db 'a',10
  41. len equ $ - msg ;longitud de nuestra cadena
  42. length2 equ  $ - mensaje2
  43.  


Saludos


« Última modificación: 2 Abril 2010, 12:23 pm por ..::| D3Bć1 |::. » En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: Mi segundo programa en ASM
« Respuesta #1 en: 3 Julio 2010, 17:41 pm »

Citar
popfd ;re-establecemos flags
        popad ;re-establecemos registros
        ret ;retorno para llamar al procedimiento


no tengo experiencia en asm en linux, pero ¿ese ret? ¿donde va a parar?

otra cosa, en este codigo y en el otro veo que haces mucho pop ¿por alguna razon en concreto?


« Última modificación: 3 Julio 2010, 17:44 pm por ctlon » En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Mi segundo programa en ASM
« Respuesta #2 en: 3 Julio 2010, 17:49 pm »

Citar
popfd ;re-establecemos flags
        popad ;re-establecemos registros
        ret ;retorno para llamar al procedimiento


no tengo experiencia en asm en linux, pero ¿ese ret? ¿donde va a parar?

otra cosa, en este codigo y en el otro veo que haces mucho pop ¿por alguna razon en concreto?
Para sacar los argumentos de la pila, el primero es el argc y los otros son respectivamente arg[0] (filename) arg[1](argumento)
Y los voy depositando en ebx, asi de la pila los 3 primeros valores son esos, por tanto el tercer valor de la pila y por tanto el ultimo en estar en EBX es el argumento para trabajar el programa de maner dinamica.

Saludos
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: Mi segundo programa en ASM
« Respuesta #3 en: 3 Julio 2010, 20:18 pm »

Tenes que pasar una direccion de memoria en ecx, ahora estas poniendo el VALOR que haya en esi. ¿Cual es ese valor? Igual depuralo con el gdb asi ves donde esta el problema exactamente ...
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
Mi segundo programa en c++
Programación C/C++
elkiy 4 2,332 Último mensaje 22 Junio 2012, 23:42 pm
por overxfl0w13
Segundo divedendo tdt
Foro Libre
desna 6 2,546 Último mensaje 12 Diciembre 2020, 18:17 pm
por simorg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines