Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: ADMIRATION en 23 Enero 2014, 14:21 pm



Título: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 23 Enero 2014, 14:21 pm
Sobre curso de introduccion al lenguaje ensamblador:
S.O: Ubuntu 12.10, Arquitectura a estudiar: IA-32, Ensamblador: Gas, Compilador: GCC(binutils, de serie).
1ª Pregunta: Sobre el tamaño de los tipos de datos, ¿es posible declararlos en Python en lugar de en C? (http://learnassembler.com/IA32esp.html)
Desde mi desconocimiento total del tema, estoy empezando en este mundo y durante este curso me van surgiendo preguntas que pueden ayudar a otras personas usando la misma plataforma y herramientas que yo. Agradeceria me fueran contestanto a este hilo.
NO CONTESTAR PARA OTRAS PLATAFORMAS Y S.O PARA SALVAGUARDAR EL CARACTER CONCISO DE ESTE HILO.
Muchas gracias de antemano


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 24 Enero 2014, 20:10 pm
A ver no se entiende tu pregunta, pero no estas en ASM para que preguntas en python y C.

Ademas esa tabla esta equivocada yo no la miraria mucho para un double o .quad el sufijo es q.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: Slava_TZD en 24 Enero 2014, 21:13 pm
A ver no se entiende tu pregunta, pero no estas en ASM para que preguntas en python y C.

Ademas esa tabla esta equivocada yo no la miraria mucho para un double o .quad el sufijo es q.

Un saludo.

La tabla está bien, se refiere a números con coma flotante.

Al op, yo tampoco entiendo la pregunta xD


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 24 Enero 2014, 22:46 pm
La tabla está bien, se refiere a números con coma flotante.

Al op, yo tampoco entiendo la pregunta xD

Para mover un double "ocho bytes", no tiene porque ser un numero de coma flotante se usa el subijo q

Código
  1. movq %rax, (%rsp) ; double
  2. movl %eax, (%rsp) ; long

A lo mejor es que no entiendo bien la tabla, es igual yo me entiendo jeje.


@ADMIRATION

Vale quieres decir que te pasemos las declaraciones que estan en C a python?

Si es eso no hace falta, tienes que cambiar el chip, en ASM (GAS) esas declaraciones no existen, bueno mentira hay algunas declaraciones que tienen practicamnete el mismo nombre. Bueno mejor llama a declaraciones directivas.

Las tienes en el link que te pase de as.

Código:
.byte    b  ; 1 byte 
.word    w  ; 2 byte
.long    l  ; 4 byte
.quad    q  ; 8 byte
.octa       ;16 byte  ; xmm registro

Depende de si tabajas con numeros de coma flotante tienes que usar otras instrucciones y no hace falta el prefijo, seguro que Tzhed\ Kyperf/  se referia a eso.

Los registros se asemejan a esas directivas, ya veras cuando avances, tambien existe un registro de 32 byte ymm, y los zmm 64 byte, depende de la CPU. No se si hay directivas para esos dos.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 27 Enero 2014, 11:55 am

Declaración en C   Tipos de datos en IA-32   Sufijo de gas   Tamaño (en bytes)
char   byte   b   1
short   palabra   w   2
int   doble palabra   l   4
unsigned   doble palabra   l   4
long int   doble palabra   l   4
unsigned long   doble palabra   l   4
char*   doble palabra   l   4
float   precisión simple   s   4
double   precisión doble   l   8
long double   precisión extendida   t   12
A la columna de la izquierda me referia. Claro que estudio ASM, pero entonces: ¿que sentido tiene dicha columna que se titula: DECLARACION EN C?
Porque esta columna no me la he inventado yo, sino que esta plasmada en el link de assembler.com que dedica un curso a ensamblador.
Solo intento buscar el sentido de la informacion que recibo.
2ª Pregunta: Respecto al codigo "hello world en ensamblador gas del link:http://www.tldp.org/HOWTO/Assembly-HOWTO/hello.html.
Queriendo entender el codigo:
         1).text                           # section declaration

                                   # we must export the entry point to the ELF 2)linker or
   3) .global _start              # loader. They conventionally recognize _start as their
                                   # entry point. Use ld -e foo to override the default.

4)_start:
                       # write our string to stdout

5)       movl    $len,%edx           # third argument: message length
6)     movl    $msg,%ecx           # second argument: pointer to message to write
7)     movl    $1,%ebx             # first argument: file handle (stdout)
8)     movl    $4,%eax             # system call number (sys_write)
9)     int     $0x80               # call kernel

                                # and exit

10)     movl    $0,%ebx             # first argument: exit code
     movl    $1,%eax             # system call number (sys_exit)
11)     int     $0x80               # call kernel

12).data                           # section declaration

13)msg:
14)   .ascii    "Hello, world!\n"   # our dear string
15)   len = . - msg                 # length of our dear string
Enumeradas todas las lineas del codigo:
¿que funcion realizan cada una, empezando por la 1).text?
Espero que vuestras respuestas le sirvan a las personas prncipiantes como yo a familiarizarse con el codigo.
Gracias cpu2 y Tzhed\ Kyperf/


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 27 Enero 2014, 14:01 pm
Pues para tener una referencia nada mas, pero esas declaraciones de C no te sirven para nada.

A ver, te explico de forma basta, si quieres saber mas lee los manuales como te dije.

.text y .data: Los programas se dividen en secciones, .text es la que contiene las instrucciones (opcodes) bueno tambien puedes cargar opcode en otras secciones como data pero eso ya es otra cosa, estas secciones algunas tienen permisos como de escritura y lectura, por ejemplo la .text solo puedes leerla pero no escribirla. La .data como dice su nombre es para almacenar datos, esta puede escribirse y leerse.

Depende de la sección que utilices tendra un offset o otro, ya que usas linux podrias usar readelf y algo con objdump, para mirar esas direcciones y permisos. Si quieres saber con mas profundidad ya sabes.

.globl es una directiva que le dice al linker por que offset empezar.

Código:
https://sourceware.org/binutils/docs/as/Global.html#Global

No miraste el link.

Y las instrucciones lo unico que hacen es pasar los parametros a una funcion de C alojada en el kernel, en este caso write y exit, tienes que leer el man de esas funciones, para saber que pasar a los parametros.

Deja bien claro lo que hace al lado, esfuerzate mas. Los de .data lo solucionas leyendo el man de as.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 27 Enero 2014, 16:21 pm
No dudes que lo he mirado, y leído y reeleido. Lo único es que me falta relacionarme con el código, voy muy perdido aun. No tengo claro aun el tipo de instrucciones. Para que sirven, en que parte se escribe.
PERO SEGUIRE LEYENDO, Y ESTUDIANDO CADA PARTE DEL CODIGO Y INFORMANDOME DE QUE ES LO QUE HACE CADA LINEA, ASI COMO LAS INSTRUCCIONES Y LOS TIPOS DE DATOS.
Cosas que tenia claras en Python y que aquí me hace falta descubrir.
Gracias y saludos cpu2.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 27 Enero 2014, 21:50 pm
Solo me dio la sensacion de que no te mirastes el manual.

Lo unico que hace ese codigo es pasar argumentos y llamar a funciones del kernel. La instruccion mov "mover" el nombre engaña no mueve copia, es una instruccion esencial, basicamente es eso lo que hace, pero si te vas a los manuales de intel veras que esta mejor explicada.

La instruccon int es mas compleja, carga el numero de la funcion en %eax, y transfiere al vector 0x80 "vale para mas vectores", que es el que usa linux para las llamadas, pero para entenderla mejor tendrias que saber para que sirve la IDT y todo eso, yo aun no lo tengo muy claro.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 28 Enero 2014, 09:13 am
Gracias por la aclaracion de la columna de la izquierda cpu2, ya me quedan los conceptos algo mas claros, y el link ultimo sobre .global del as y las otras me va ayudando a aclarar conceptos, aunque tengo aun muchisimo que aclarar. Pero voy de camino.
Por eso en la pagina de gas del codigo "hellow world", me moleste en enumerar el codigo linea a linea: Para que miembros con tu nivel de ensamblador y que hayan tocado esta plataforma en concreto, fueran describiendo poco a poco el desarrollo de cada linea. No hacia falta describirlas todas a la vez, sino a medida que algun miembro estuviera inspirado, para ir siguiendo el hilo, ¿me entiendes?
Para ayudar a personas como yo que empiezan aqui desde cero, a irse familiarizando un poco mas con el codigo y su estructura.
Las ultimas referencias que das me ayudan mucho.
Gracias cpu2, un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 12 Febrero 2014, 18:02 pm
Pregunta sobre este, mi primer codigo en asm/gas/x86/intel,  para ponerlo en practica:
Abro consola ubuntu e invoco escribiendo:

$ as
Sigo con el código:
$ .section .data.                                                                      #declaro la variable "message"                                                           
message: db .ascii "esta es una linea de texto ,0dh ,0ah y esta es otra" , 0
#Desde aquí finalizo codigo
movl $1, %eax
movl $0, %ebx
int $0×80

¿deberia haberlo escrito en editor de texto con el resultado de la lectura de la frase?
¿que errores he cometido?
¿el resultado que genera este código es la lectura de esta frase con retorno de carro como indican los símbolos hexadecimales 0dh y 0ah?
Perdonen mi torpeza y mis confusiones pero soy noob e intento aprender paso a paso este fascinante pero confuso lenguaje



Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 12 Febrero 2014, 20:08 pm
Tendrias que escribir el codigo en un editor de texto, luego guardarlo con la extension .S "AT&T", y luego ensamblarlo y linkearlo con as y ld como te dije.

Ese codigo no lee la frase, llama a la funcion exit, practicamente no hace nada, simplemente salir del programa.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 12 Febrero 2014, 20:24 pm
Gracias cpu2, asi lo hare. ¿que le faltaría al código para que pudiera imprimir o salir esa frase?
Otra cosa que no entiendo: Si según tengo entendido, Gas tiene la sintaxis AT&T y Intel es sintaxis de Nasm, ¿como he podido encontrar un curso que utiliza Gas con plataforma IA-32?
Gracias de nuevo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 12 Febrero 2014, 21:23 pm
Código
  1. .section .data
  2.  
  3. message: .ascii "esta es una linea de texto"
  4.         .byte 0x0d,0x0a
  5.         .ascii "y esta es otra"
  6.         .byte 0x0
  7.  
  8. .section .text
  9. .globl _start
  10.  
  11. _start:
  12.                                            ; write
  13. incl %ebx
  14. movl $message, %ecx
  15. movb $42, %dl
  16. movb $4, %al
  17. int $0x80
  18.                                            ; exit
  19. movb $0x1, %al
  20. xorl %ebx, %ebx        ; puedes poner el valor que quieras
  21. int $0x80

La otra pregunta sera mejor que la reformules, estas preguntando de que Gas funciona con x86?

Si es asi, la sintaxis no tiene nada que ver, para el procesador sera el mismo opcode, es igual Gas o Nasm.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 14 Febrero 2014, 17:08 pm
Gracias cpu2. Voy aclarandome con el codigo.
La otra pregunta a la que me refiero es asi tal cual. Y la prueba la tienes aqui, en la direccion siguiente: www.ciens.ucv.ve.8080/.../Tema_3.ppt PROGRAMACION EN ENSAMBLADOR.
Para una persona que empieza completamente desde cero como yo, antes de entrar en materia, ha de empezar por ubicarse(que es mejor para su S.O y sus bits, que ramas hay dentro de esa materia y cual es la que debo elegir, que herramientas utiliza esa rama de esa materia en particular, un curso o tutorial que te facilite la didactica a tu nivel en esa materia....etc etc etc) y tu alomejor ya no te acordaras de tus inicios, pero te aseguro que ese intento de ubicarse es en ocasiones harto compleja y que te provocan muchas dudas.
En esta web encontre mi ubicacion, eso creo. Pero como no, lo que te he comentado:
si Nasm es a Intel y Gas es a AT&T, o yo sigo confuso, o en este curso de esa web hay un error o....LO QUE PIENSO ES QUE GAS Y BINUTILS 2.10 SOPORTEN SINTAXIS INTEL. ¡¡NECESITO ESTAR SEGURO DE MI CORRECTO APRENDIZAJE!!
Dime tu lo que opinas desde tu experiencia.
Gracias cpu2. Y un fuerte saludo


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 15 Febrero 2014, 01:52 am
Vamos a ver, creo que le estas dando inportancia a chorradas, como puede ser la sintaxis.

Gas en un ensamblador como Nasm, Gas si soporta la sintaxis de intel, como me preguntaras el como, pues coloca lo siguiente antes de declarar la section text, intel_syntax noprefix

Bien ahora ya podras ensamblar con Gas en la sintaxis de intel, pero el opcode es el mismo, el aprendizaje es mismo, que la sintaxis de intel sea mas conocida no significa ni mucho menos que esta sea mejor, solo es otra forma de anotacion, estas perdiendo el tiempo en chorradas.

Las rama la escojes tu, ASM solo es un lenjuage, criptografia, malware, software general etc...

Lo unico que necesitas es un ensamblador y un linker, poner ese Ubuntu a 64 bits para exprimir el procesador al maximo, y empezar en serio, como leer el tomo numero uno de intel.

Un saludo.

P.D: No lei ese archivo ya que es un powerpoint, no leo ese tipo de cosas, pero al ser un trabajo ya me imagino lo que seria.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 16 Febrero 2014, 18:36 pm
Me has aclarado muchas dudas "chorras", como bien has dicho jejeje.
Lo hare tal como dices. Es lo que tiene la incertidumbre cuando te interesa mucho un tema y quieres hacerlo bien y a la vez es completamente desconocido, como es el caso del lenguaje ensamblador. Le das importancia a todo. A demasiado
Gracias por ayudarme a ubicarme y sentirme mas seguro.
Saludos y mi mas sincero respeto.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 16 Febrero 2014, 19:38 pm
Me parece perfecto que des importancia a todo, si todo el mundo fuera asi seria todo perfecto, pero no en esto.

Código
  1. movl %ebx, %eax
  2. mov eax, ebx

Dale la importancia en como diseñar el algoritmo. no en la anotacion de el mismo.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 17 Febrero 2014, 12:30 pm
Otra cosa que no sabia y que es necesario tener por la mano, es saber manejar la tabla ASCII por el tema de la manipulacion de datos en hexadecimales, mucho mas comodo.
Seria otro punto a tener en cuenta para las personas que se han lanzado en este lenguaje desde cero como yo. HAY QUE SABER COMO FUNCIONA LOS BINARIOS Y TABLA ASCII PARA LA MANIPULACION DE DATOS PARA EL LENGUAJE ENSAMBLADOR.
Si estoy equivocado corregirme por favor.
Gracias


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 17 Febrero 2014, 21:46 pm
Tan facil como hacer un man ascii, y verla traducida. Pero no vendria mal aprenderte el formato hexadecimal.

Se usa practicamente para los offets y tablas para manipular bits, o almenos es lo que ago yo. 0xffff, 65535, 11111111 11111111, para depende de lo que agas te sera mejor uno u otro. Como puedes observar el hexadecimal es mas corto, para trabajar con numeros grandes seria mejor hex.

Un saludo


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 22 Febrero 2014, 08:59 am
Hola cpu2. Si, eso es otra cosa que me ha quedado clara, con los hexadecimales se trabaja mucho mas facil.
Aunque las expresiones de "hacer un man ascii", "offets", como manipular bits, etc todavia las desconozco, pero poco a poco.
Ahora estoy con el vol.1 de Intel, y no se me hace nada pesada, aunque hay partes o expresiones que no comprendo.
Si no te importa, cpu2, podria dejar reflejadas aqui mis dudas de la guia vol1 de Intel a medida que me vayan surgiendo y contestandolas asi podemos ayudar a la gente que como yo parta de cero en este lenguaje tan apasionante pero complejo a la vez.
Que supongo que quien parta de cero le asaltaran el mismo tipo de dudas.
ES INTERESANTE Y AYUDA A TENER IMPRESA O DIBUJADA EN GRANDE LA TABLA ASCII EN TU ESCRITORIO(para los que empiezan a introducirse), ya que se le da mucha utilidad.
Gracias por tu apoyo cpu2.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 22 Febrero 2014, 17:57 pm
La orden man es de sistemas Linux/BSD, tienes que ejecutarla en la terminal de tu ubuntu, man ascii, hay tendras la tabla en hex, decimal, octal y char.

No hay ningun man sobre offset ni bits, estamos hablando de manuales del sistema, no de los del processador. Simplemente un offset es un desplazamiento valido (direccion memoria), y los bits no es mas que otra base como puede ser el hex y el decimal, pero que esta tiene sus ventajas.

Claro que puedes reflejar las dudas.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 25 Febrero 2014, 11:34 am
Gracias por tus aclaraciones cpu2
Ahi van mis primeras dudas sobre Manual Intel Volumen1:
1ª. A que se refiere con "una nueva sintaxis para CPUID, CR y MSR. ¿que es la CPUID, CR y MSR? TEMA 1-6 pag.26
2ª. No entiendo de momento el esquema que le sigue. FIGURA 1-2.
3ªSobre el TEMA 1-4 LITERATURA RELACIONADA: supongo que de todas las "literaturas" relacionadas, la de INTEL 64 AND IA-32 PROCESSORS MANUALS(PRINTED OR PDF DOWNLOADS), como complemento para mi ahora es la mas practica(solo supongo). ¿debo continuar con esta guia o dejarla como refuerzo y seguir con el manual general del vol1 como hasta ahora?.
Gracias de antemano y siento estas preguntas tan basicas de novato.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: xv0 en 25 Febrero 2014, 19:52 pm
1- Te esta explicando el nuevo orden de esas instrucciones "cpuid" y los registros, estos devuelven valores, o tu escribes valores y tienen que seguir un orden, cuando empeze a leer esto ese orden ya estaba, a lo mejor lo explican para gente que tenia una arquitectura mas anticuada, que conste de que yo leo los de AMD.

Cpuid es para identificar el processador o el sistema, "informacion", CR son los registros de control, seria para controlar el sistema, ejemplo CR0 depende de los bits que cambies puedes desactivar o activar modo protegido, tiene muchas mas opciones, depende del registro de control que sea, tendra funciones diferentes, pero todo eso se puede hacer con privilegios. MSR son para configurar el sistema como los CR solo puedes usarlos con privilegios, lee las funciones que tiene y los registros, pero la verdad este y los CR dejalos de momento, puedes jugar con CPUID pero con esos dos no.

2- Pues te esta explicando la nueva sintaxis, por ejemplo en la de cpuid te esta diciendo de que las ordenes se cargan en eax y la instruccion depende de la instruccion que cargaste en eax, esta devuleve valores a otros registros para que tu los compares, pueden ser identificaciones de la cpu, para ver si soportas extensiones, instrucciones etc...

Sobre las otras mas de lo mismo, lee mejor sobre esos temas, para leer los datos que te dan esas intrucciones y registros tienes que leer los bits, es eso lo que explica.

3- Como quieras, como bien tu dijiste son guias para reforzar o saber mas sobre esos temas que leiste, si te interesa alguno lee y ya esta, podrias mirarte el de cpuid, porque para los otros dos tienes que tener lo basico para entender algo.

Un saludo.


Título: Re: PREGUNTAS CONCRETAS SOBRE ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS
Publicado por: ADMIRATION en 25 Febrero 2014, 20:34 pm
Gracias cpu2.
Entonces prefiero centrarme en el volumen1 gral, hasta que coja la base y conocimientos suficientes para "jugar" y experimentar mas abiertamente.
Un saludo cpu2