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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Que cosa mas rara
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Que cosa mas rara  (Leído 7,473 veces)
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Que cosa mas rara
« en: 2 Noviembre 2009, 23:19 pm »

que alguien compile y pruve este codigo ensamblador en linux.
yo de verdad no entiendo nada, pero cada vez esto me atrae mas:

Código:

.text  

        .globl main  

main:

        movl    $1, %edx
addl     $1, %edx

movl    $1, %ebx      
        movl    $4, %eax        
        int     $0x80          

movl $msg, %edx
movl    $1, %ebx        
        movl    $4, %eax      
        int     $0x80        




        movl    $0, %ebx      
        movl    $1, %eax      
        int     $0x80          

.data
msg:
.string "\n"


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.967


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #1 en: 3 Noviembre 2009, 20:47 pm »

A grosso modo en Linux se pone en eax el numero del servicio y los siguientes parametros van en ebx, ecx, edx, esi, edi y ebp.

En /usr/include/asm/ unistd.h/unistd_32.h/unistd_64.h encontraras los numeros de los servicios.

1 es __NR_exit y el 0 que se le pasa como parametro en ebx es el valor de retorno del programa (http://linux.die.net/man/2/exit).

4 es __NR_write y el 1 que le pasas como primer parametro en ebx es STDOUT (salida por consola), el segundo parametro (ecx) deberia ser el puntero a la cadena y el tercer parametro (edx) el tamaño de la cadena.

http://linux.die.net/man/2/write


Un ejemplo funcional:
Código
  1. movl $6, %edx
  2. movl $msg, %ecx
  3. movl    $1, %ebx        
  4. movl    $4, %eax      
  5. int     $0x80
  6.  
  7. ;;resto del codigo
  8. .data
  9. msg:
  10. .string "DAAAA\n"


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
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #2 en: 3 Noviembre 2009, 21:00 pm »

lo de edx seria la longitud de la cadena no? vale creo que ya lo pillo.
por cierto has provado a compilarlo? es algo bastante raro
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.967


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #3 en: 3 Noviembre 2009, 21:25 pm »

Si, edx es el tercer parametro es decir: size_t count.

Si, lo ensamble y enlace (con as y ld) pero no hace nada, no funciona tal como esta, si pones lo que te dije si escribira eso en la consola.


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
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #4 en: 3 Noviembre 2009, 23:23 pm »

a mi me salian un monton de caracteres raros.
mira como me ha quedado al final:

Código:
.text   
        .globl main   

main:

        movl    $1, %ecx
addl     $1, %ecx

movl $1, %edx
movl    $1, %ebx       
        movl    $4, %eax       
        int     $0x80         

movl $1, %edx
movl  $msg, %ecx
movl    $1, %ebx       
        movl    $4, %eax       
        int     $0x80         




      movl    $0, %ebx       
      movl    $1, %eax       
       int     $0x80           

.data
msg:
.string "\n"

El problema es que ahora lo ejecuto y me sale una sola linea en blanco y no sale un 2.

Graciassss
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.967


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #5 en: 3 Noviembre 2009, 23:25 pm »

En el primer codigo eso depende del contenido de ecx ... a lo que apunte y lo que haya en esa direccion.

El segundo parametro de write es un puntero asi que lo primero que le pasas es un puntero erroneo (ecx=2). En el segundo caso le pasas un puntero a una cadena que contiene un solo caracter, \n, es decir un salto de linea, si queres ver algo de texto usa una cadena como la que puse antes ...
« Última modificación: 3 Noviembre 2009, 23:28 pm por Eternal Idol » 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
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #6 en: 3 Noviembre 2009, 23:27 pm »

y como hago para que me imprima el resultado de la suma?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.967


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #7 en: 3 Noviembre 2009, 23:31 pm »

Transformandolo a cadena, cada digito del numero en cuestion debe ser transformado a caracter (no olvides el cero terminador de cadena). Otra opcion es usar la libc (printf/sprintf por ejemplo).
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
lapras

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #8 en: 6 Noviembre 2009, 17:02 pm »

como hago para pasarlo a cadena
« Última modificación: 6 Noviembre 2009, 17:30 pm por tuket » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.967


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Que cosa mas rara
« Respuesta #9 en: 6 Noviembre 2009, 17:33 pm »

Sino usas funciones existentes en la g/libc entonces tenes que aplicar la misma logica que en cualquier otro lenguaje de programacion. Tomas el numero y usando divisiones y restos averiguas todos sus digitos, a cada uno de ellos le sumas 48 (es decir '0') para transformarlo en un caracter.

Ejemplo simple:

253= 253 / 10 = 25
        253 % 10 = 3 + 48 = 51 = '3'
        25 / 10 = 2
        25 % 10 = 5 + 48 = 53 = '5'
        2 + 48 = 50 = '2'
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] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AP abierto y cosa rara
Hacking Wireless
tertulia 3 3,549 Último mensaje 23 Septiembre 2021, 18:15 pm
por tertulia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines