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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  MMM por donde empiezo? [Pregunta del millón]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: MMM por donde empiezo? [Pregunta del millón]  (Leído 4,896 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
MMM por donde empiezo? [Pregunta del millón]
« en: 7 Marzo 2010, 19:31 pm »

Haber antes de nada aclarar que de ASM se lo que he podido aprender debuggeando apps:
Que EIP apunta a la siguiente direciond e memoria que va ejecutar el procesador
Algunos registros...
que con ADD añadimos datos a un regsitro y se suman....

Y que no dispongo d emedios para comprar ningun libro
Algun PDF, paper, o guia, aunque sea un hi world bien explicado

Me conformo con poder hacer algo por mi cuenta.

Saludos


En línea

08l00D

Desconectado Desconectado

Mensajes: 168


Ver Perfil
Re: MMM por donde empiezo? [Pregunta del millón]
« Respuesta #1 en: 7 Marzo 2010, 19:53 pm »

Deberias aclarar primero en que sistema operativo pensas usar ASM y en que procesador, se que puede sonar sin importancia saber en cual que sistema operativo pero la verdad es que para el ensamblador no hay ningun estandar y los ensambladores implementan el lenguaje como mas les plazca... y por eso saber en que sistema para recomendarte un libro es de gran ayuda, por que si usas "algun unix" lo mas recomendable seria que usaras el ensamblador GAS... y si vas a usarlo te puedo recomendar varios buenos libros y material...
Tambien hay libros orientados para windows...
Igualmente todo el ensamblador(segun las instruc.. del procesador) es el mismo cuando sepas ensamblador en cualquier OS y cualquier ensamblador no te va a costar mucho trabajo "mudarte a otro"..
Pone tu sistema operativo... y empeza por lo menos leyendo las chinchetas del subforo que puso Eternal Idol.


En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: MMM por donde empiezo? [Pregunta del millón]
« Respuesta #2 en: 7 Marzo 2010, 20:14 pm »

Deberias aclarar primero en que sistema operativo pensas usar ASM y en que procesador, se que puede sonar sin importancia saber en cual que sistema operativo pero la verdad es que para el ensamblador no hay ningun estandar y los ensambladores implementan el lenguaje como mas les plazca... y por eso saber en que sistema para recomendarte un libro es de gran ayuda, por que si usas "algun unix" lo mas recomendable seria que usaras el ensamblador GAS... y si vas a usarlo te puedo recomendar varios buenos libros y material...
Tambien hay libros orientados para windows...
Igualmente todo el ensamblador(segun las instruc.. del procesador) es el mismo cuando sepas ensamblador en cualquier OS y cualquier ensamblador no te va a costar mucho trabajo "mudarte a otro"..
Pone tu sistema operativo... y empeza por lo menos leyendo las chinchetas del subforo que puso Eternal Idol.
Es tipo UNix, Intel
He leido pero hay muchas cosas que aun se escapan a mi comprensión
por ejemplo:
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
  19.  
  20.  
Que significa todos esto:
Código
  1. mov edx,len ;message length
  2. mov ecx,msg ;message to write
  3. mov ebx,1 ;file descriptor (stdout)
  4. mov eax,4 ;system call number (sys_write)
  5. int 0x80 ;call kernel
Luego no entiendo tampoco que significa db, he presupuetso que msg es el identificador de la cadena:
Código
  1. msg db 'Hello, world!',0xa
y el 0xa tampoco lo entiendo.
Basicamente no entiendo nada ;D

Saludos
En línea

08l00D

Desconectado Desconectado

Mensajes: 168


Ver Perfil
Re: MMM por donde empiezo? [Pregunta del millón]
« Respuesta #3 en: 7 Marzo 2010, 20:58 pm »

Es tipo UNix, Intel
Bien, entonces te puedo recomendar varios libros y links interesantes que a mi me ayudaron.

El codigo ese si queres te lo explico, pero creo que mas haya de eso seria mas recomendable que leas algun libro(si ya se re pesado pero es lo mas recomendable)

Ese codigo que pusiste es para Linux, y utiliza las llamadas a sistemas que brinda dicho sistema operativo (equivaldrian a las API de Windows).

El codigo lo que hace es mostrar un mensaje en pantalla, mediante la llamada a sistema: sys_write. Los sistemas Unix brindan una interrupcion por software, que no es mas que una rutina, que seria la "0x80" que es la que maneja las llamadas al sistema por asi decirlo. Cuando se salta a la interrupcion "0x80" (A traves de la instruccion "int 0x80"") quiere decir, BASICAMENTE, que queres usar un servicio que brinda el sistema operativo.. Cual de todos? el que especificas en el registro "eax" antes de saltar a la interrupcion... ok y como le paso los parametros a dicho servicio del sistema... facil con los demas registros... (ebx, ecx, edx)
Bueno la explicacion es re cutre pero es lo que se me ocurrio en el momento.
Paso a explicarte el codigo.
Código:
	mov	edx,len -> tercer parametro  a sys_write la longitud de la cadena que queres escribir
Código:
	mov	ecx,msg -> segundo parametro a sys_write y es la direccion de la cadena que queres escribir
Código:
	mov	ebx,1 -> primer parametro para sys_write y es a a que descriptor de fichero vas a escribir en este caso seria a STDOUT osea la salida estandar que seria la pantalla...
Código:
	mov	eax,4 -> en eax va la llamada a sistema que queres realizar a cada sys_call se le asigna un numero a sys_write se le asigna el numero 4
Código:
	int	0x80	-> aca se invoca a la rutina de manejo de llamadas al sistema... con los parametros asignados arriba

DB significa Define byte, en este caso su uso es similar a declarar un arreglo de caracteres (o cadena para algunos) en C.
El caracter 0xa es el caracter ASCII de salto de linea en decimal es el numero 10 ... LF es lo mismo que el caracter '\n' en C.

Espero hayas comprendido por lo menos un poco mas de como va el codigo ese...
El libro que yo te recomiendo es... "Professional Assembly" ... pero no te dejes llevar por el titulo no es para expertos ni nada de eso .. lo que si es que explica muchas cosas, y es bastante interesante si tenes un unix.. ya que aparte te enseña a programar utilizando las herramientas de gnu binutils (gnu as, gprof, ld, etc etc).. aunque no las explica en profundidad te va a servir de mucho... y esta orientado a la plataforma IA-32 incluso incluye un apartado para las extensiones SIMD, SEE, SEE2 de Intel...
Trata de sobre inline assembly con en C y C++, explica como usar la libreria de C en ensamblador y como crear funciones en ensamblador para utilizar en programas en C o C++, tiene un gran capitulo sobre la FPU, en fin es un buen libro.. Eso si usa la sintaxis AT&T, ya que el ensamblador GAS de GNU usa esa sintaxis que es un poco diferente a la sintaxis Intel pero no menos intuitiva como algunos dicen  :rolleyes: ...
Hace unos meses habia empezado a leer otro libro(el cual lo deje al quinto capitulo  :xD) llamado "Assembly Language step by step" que tambien esta orientado a programacion en Linux .. pero utilizando NASM talvez este te resulte mejor por la sintaxis Intel.. digo nose.. por lo que alcane a ver explica con mas detalle los procesadores de Intel, el manejo de memoria y demas cosas que te van a resultar de mucha ayuda si lo desconocias... El resto del libro es mas o menos lo mismo, supongo, que los demas libros dentro de esta area...
« Última modificación: 8 Marzo 2010, 01:39 am por 08l00D » En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: MMM por donde empiezo? [Pregunta del millón]
« Respuesta #4 en: 7 Marzo 2010, 21:41 pm »

Totalmente.
Ese codigo ya lo entiendo.
Una cosa, si le indico en el primer parametro envezde 1 un 2 le estare indicando otra salida, no?

Saludos
En línea

RAID-MAM

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Re: MMM por donde empiezo? [Pregunta del millón]
« Respuesta #5 en: 7 Marzo 2010, 21:59 pm »

http://board.flatassembler.net/topic.php?t=5950

Leete la documentacion que trae en help
En línea

08l00D

Desconectado Desconectado

Mensajes: 168


Ver Perfil
Re: MMM por donde empiezo? [Pregunta del millón]
« Respuesta #6 en: 7 Marzo 2010, 22:36 pm »

Una cosa, si le indico en el primer parametro envezde 1 un 2 le estare indicando otra salida, no?
No y si, en realidad lo que le estas indicando es en que descriptor de fichero escribir si es en la salida estandar (1), en la entrada(0) ... pero si vos creaste un descriptor de fichero ... independiente de los establecidos por el sistema .. como puede ser si abris un archivo con la sys_call open -> sys_open.. le pasas el descriptor del fichero y escribis en el archivo que abriste es muy parecido a los handles en Windows...
En las paginas del man esta todo lo referente a llamadas al sistema...
« Última modificación: 7 Marzo 2010, 22:39 pm por 08l00D » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pregunta : Dónde o cómo adquirieron sus conocimientos? « 1 2 »
Foro Libre
Tracxus 10 4,596 Último mensaje 15 Julio 2012, 17:27 pm
por m0rf
La pregunta del millón.. ¿Y ahora por dónde sigo?
Dudas Generales
jose_ank 6 4,397 Último mensaje 18 Junio 2019, 15:52 pm
por jose_ank
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines