Dudas sobre ensamblador

Este es tu lugar para hablar de programación, compartir, crear y desarrollar nuevos proyectos

Moderador: Moderadores

Dudas sobre ensamblador

Notapor freestyle » Dom Abr 10, 2011 2:42 pm

hola, estoy empezando a programar en ensamblador en linux y tengo algunas dudas.

Bueno según entiendo para programar en ensamblador existe unas instrucciones básicas compatibles con todos los procesadores una misma arquitectura,
luego por otra parte el sistema operativo en este caso linux proporciona las llamadas al sistema.

Por otra parte cada procesador tiene un conjuto de intrucciones distintas dependiendo de la tecnología que use como puede ser MMX, SSE.

Mis dudas son:
¿las intrucciones compatibles con todos los procesadores siguen algun estadar o algo similar, donde puedo obtener una descripción de ellas?

Las instrucciones del tipo MMX, SSE en que entornos puedo usarlas, es decir puedo usarlas con linux y en windows? donde puedo obtener la descripción de ellas?

Cuando programo ensamblador en linux solo es necesario utilizar la int 80h o también es necesario como en MS-DOS utilizar la de la bios para algunas tareas?


Saludos
freestyle
<|:-)
<|:-)
 
Mensajes: 539
Registrado: Jue Ene 12, 2006 11:30 pm

Re: Dudas sobre ensamblador

Notapor Newhack » Dom Abr 10, 2011 9:27 pm

Hola.

Yo hace unos años ya que no toco el ensamblador, y aunque probé algo para pc, mi mayor actividad fue para 8 bits.:roll:

Pero en lineas generales te puedo decir que si,
- Cada tipo de procesador y cada arquitectura tiene sus instrucciones, si bien se intenta, dentro de lo posible, no dispersar mucho las siglas y su significado.

- Dentro el pc p.e. hay un juego básico de nemónicos reconocido por todos los procesadores, y sobre la marcha a medida
que han ido apareciendo avances y nuevos modos se han ido añadiendo unos nuevos reconocidos solo por esos últimos y posteriores.

- Asi mismo, y para ciertas alpicaciones también se han ido añadiendo algunos nemónicos que son en realidad instrucciones compuestas.
La ventaja de estas es que ordenas varias cosas de una tacada sin tener que perder tiempo decodificando varios nemónicos.
Una ventaja real cuando vas apretado de tiempo, como por ejemplo el multimedia bajo pentium(1), (instr. MMX).
Como ya has dicho, esto ha ocurrido ya varias veces, dando lugar a diferentes extensiones de ordenes específicas para
unas determinadas familias o aplicaciones.

- A parte de eso, y para una mismo tipo de aparato el juego de instrucciones disponible puede variar drásticamente dependiendo
de si estas usando un microprocesador con un juego de códigos bien surtido y completo o si por el contrario trabajas
con un micro con códigos 'risc' donde se recortan las instrucciones al máximo en beneficio de la rapidez de ejecución.


" Ya he elegido el micro, el tipo, las instrucciones disponibles, etc. ¿me serviran las mismas para linux que para windows ?"

- Si, ¿porque no?. Ten en cuenta que en ensamblador eres tu hablando directamente con el hardware, ambos estais por debajo del nivel del s.o. (Dejando aparte el que
el propio ensamblador sea un programa de usuario y por tanto esté -sobre- el s.o. , pero esto es circunstancial).
El código que estás armando va al microprocesador, y a este le trae sin cuidado que sistema está corriendo "por ahí arriba"
A el que le den sus instrucciones y los demás que hagan lo que les convenga.
Lo que si cambiará según el caso es el propio programa ensamblador, que tendrá que adaptarse al sistema operativo que lo soporta.

- Y lo que como dices si tendrás que tener en cuenta es que las llamadas al sistema son totalmente distintas para cada s.o.
En cuanto a la bios está en un integrado, y como tal este permanece invariable al cambio de software, si bien parece que algunos
sistemas operativos se apoyan en el como en columna maestra y otros se lo toman solo "como una sugerencia". :-)


- ¿Donde encontrar las instrucciones disponibles para cada caso?.
Pues no se si hay una respuesta mejor y mas completa, (probablemente si), pero yo el primer sitio donde miraría es
en las páginas de especificaciones técnicas del fabricante para ese chip.
Aparte, también encontrarás mas documentos ayudas y ejemplos en páginas de la comunidad linux dedicadas a
la programación a bajo nivel y al debugging en linux. Y por supuesto aqui en el foro, donde también el ensamblador tiene sus buenos seguidores.
Y lo correspondiente para Windows, subrrayando la búsqueda dentro de la web de microsoft.


No se si me dejo algo, creo que no, eso es lo que te puedo decir ahora mismo.


Un saludo.

Newhack.
Avatar de Usuario
Newhack
<|:-D
<|:-D
 
Mensajes: 1865
Registrado: Jue Dic 20, 2007 7:36 pm

Re: Dudas sobre ensamblador

Notapor freestyle » Lun Abr 11, 2011 1:38 pm

Gracias por tu respuesta me ha quedado un poco más claro el asunto. He seguido investigando a raíz de tu comentario
y he descubierto que hay dos sintaxis en ensamblador para linux una de AT&T y otra de Intel.

El procesador con el que quiero trabajar es un i7 de portátil y he encontrado bastante documentación en la página de Intel como me indicabas
http://www.intel.com/products/processor ... /index.htm

Ahora me surge otra duda, este procesador es a 64 bit, ¿es necesario programar en 64 o puedo hacerlo en 32 bit?

Saludos
freestyle
<|:-)
<|:-)
 
Mensajes: 539
Registrado: Jue Ene 12, 2006 11:30 pm

Re: Dudas sobre ensamblador

Notapor NewLog » Lun Abr 11, 2011 7:00 pm

Juraria que puedes hacerlo en 32 bits, aunque imagino que habrá instrucciones especificas para tu procesador de 64 bits.

Seguro que puedes continuar utilizando instrucciones como mov eax, 10 y no mov rax, 10, que sería el equivalente en 64 bits.
Imagen
http://www.overflowedminds.net - Quieres introducirte al exploiting?
Avatar de Usuario
NewLog
<|:-D
<|:-D
 
Mensajes: 1130
Registrado: Sab Ene 14, 2006 1:03 am

Re: Dudas sobre ensamblador

Notapor vlan7 » Lun Abr 11, 2011 11:42 pm

freestyle escribió:Ahora me surge otra duda, este procesador es a 64 bit, ¿es necesario programar en 64 o puedo hacerlo en 32 bit?


Depende de si el Linux es a 32 o a 64. Yo actualmente el único ASM que hago es cuando juego con shellcoding, y dado que la Debian de mi máquina física es a 64 bits, hago las prácticas en una VM con un Linux a 32 bits.
There is a crack, a crack in everything That's how the light gets in. -subculture

zen7.vlan7.org
Avatar de Usuario
vlan7
<|:-D
<|:-D
 
Mensajes: 1176
Registrado: Dom Mar 05, 2006 11:16 pm
Ubicación: Mas alla del EIP

Re: Dudas sobre ensamblador

Notapor freestyle » Mar Abr 12, 2011 10:54 am

Gracias por la ayuda prestada, he seguido leyendo un poco más y me encuentro con esto:

http://es.wikipedia.org/wiki/Categor%C3 ... adores_x86

Parece ser que según los modos se guarda compatibilidad con procesadores anteriores.

Y ahora la pregunta es, ¿Se puede elegir el modo de operación? ¿Como se en que modo estoy, para saber que instrucciones puedo utilizar?

vlan7 podrías probar a compilar el code en una maquina de 64, haber si obtienes los mismos resultados
freestyle
<|:-)
<|:-)
 
Mensajes: 539
Registrado: Jue Ene 12, 2006 11:30 pm

Re: Dudas sobre ensamblador

Notapor vlan7 » Mar Abr 12, 2011 2:14 pm

Pues una rápida búsqueda en google me dice que sí que se puede, al parecer a la hora de enlazar con ld hay que pasar el parámetro siguiente:

-m elf_i386

Lo probaré en cuanto pueda, espero que sea posible :p

Saludos.
There is a crack, a crack in everything That's how the light gets in. -subculture

zen7.vlan7.org
Avatar de Usuario
vlan7
<|:-D
<|:-D
 
Mensajes: 1176
Registrado: Dom Mar 05, 2006 11:16 pm
Ubicación: Mas alla del EIP

Re: Dudas sobre ensamblador

Notapor freestyle » Mar Abr 12, 2011 6:00 pm

Mirando la ayuda del ld me sale esto, gracias por la sugerencia vlan7

ld: supported targets: elf64-x86-64 elf32-i386 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
ld: supported emulations: elf_x86_64 elf_i386 i386linux elf_l1om

Saludos
freestyle
<|:-)
<|:-)
 
Mensajes: 539
Registrado: Jue Ene 12, 2006 11:30 pm

Re: Dudas sobre ensamblador

Notapor vlan7 » Mar Abr 12, 2011 6:18 pm

Pues sí que se puede, lo acabo de verificar en una Debian x64 con un holamundo. :)

Código: Seleccionar todo
vlan7@zen7:~$ cat holamundo.asm
BITS 32

section .text
global _start

_start:
mov al,0x04
xor ebx, ebx
inc ebx
mov ecx, cadena
cdq
mov dl, 0x11
int 0x80
xor eax, eax
inc eax
int 0x80
cadena:
db "Hola mundo"
vlan7@zen7:~$ nasm -f elf32 holamundo.asm -o holamundo.o
vlan7@zen7:~$ ld -m elf_i386 holamundo.o -o holamundo
vlan7@zen7:~$ ./holamundo
Hola mundo.symtavlan7@zen7:~$ getconf LONG_BIT
64


Un saludo.
There is a crack, a crack in everything That's how the light gets in. -subculture

zen7.vlan7.org
Avatar de Usuario
vlan7
<|:-D
<|:-D
 
Mensajes: 1176
Registrado: Dom Mar 05, 2006 11:16 pm
Ubicación: Mas alla del EIP


Volver a Programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

cron