Junio 22, 2018, 09:03:49 am

Autor Tema: Informacion sobre ASM  (Leído 8998 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado WaesWaes

  • Actualmente es
  • Colaborador
  • ****
  • Mensajes: 4402
  • You are not prepared!
    • Ver Perfil
Informacion sobre ASM
« en: Enero 27, 2012, 04:55:34 pm »
El lenguaje ensamblador  o ASM es un lenguaje de bajo nivel, eso quiere decir que esta mas proximo a ser entendido por un procesador que por un humano, es simplemente codigo maquina (que se representa en binario) que se representa mediante mnemonicos para facilitar al programador la tarea de recordar y escribir sentencias.

Era altamente utilizado en el comienzo de las computadoras, aunque, actualmente con la invencion de los lenguaje de alto nivel ASM pierde sentido, y es inutil que pueda competir con programas hecho mediante estos lenguajes, ya sea por su infraestructura o portabilidad, ademas el codigo ASM es dificil de entender (mas bien de abstraer a una idea humana) y por lo tanto es bastante engorroso hacer revisiones o correcciones de codigo.

Sin embargo, por mas que sea un lenguaje "viejo" en la actualidad se encuentra en el puesto 20 de los lenguajes mas utilizados, lo cual esta bastante bien, esto se debe a que es unico en su genero, y siempre va a ser impresindible su uso, ademas tiene grandes ventajas frente a los lenguajes de alto nivel (como tambien desventajas claro esta).

De wikipedia algunas de sus desventajas son:

*El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel.

*El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra máquina distinta. Al cambiar a una máquina con arquitectura diferente, generalmente es necesario reescribirlo completamente.

Y algunas de las ventajas:

*Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho más rápidos y consumen menos recursos del sistema (memoria RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel. (hay que notar que los compiladores de lenguajes de alto nivel son cada ves mas avanzados por lo que es preciso que se sepa programar bien en ASM para que la diferencia sea notable)

*Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de código difíciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están disponibles en los lenguajes de alto nivel.

*También se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que se interrumpa durante su ejecución.

Y una lista de tareas en las que se utiliza actualmente (notar que en algunos casos se usa por conveniencia y en otros es la unica alternativa):

*es requerido un ejecutable binario independiente (stand-alone), es decir uno que deba ejecutarse sin recursos a componentes de tiempo de ejecución o a bibliotecas asociadas con un lenguaje de alto nivel; ésta es quizás la situación más común. Son programas empotrados que solo almacenan una pequeña cantidad de memoria y el dispositivo está dirigido para hacer tareas para un simple propósito. Ejemplos consisten en teléfonos, sistemas de combustible e ignición para automóbiles, sistemas de control del aire acondicionado, sistemas de seguridad, y sensores
   
*interactuando directamente con el hardware, por ejemplo en drivers de dispositivo y manejadores de interrupción
   
*usando instrucciones específicas del procesador no explotadas o disponibles por el compilador. Un ejemplo común es la instrucción de rotación bitwise en el núcleo de muchos algoritmos de cifrado
   
*creando funciones vectorizadas para programas en lenguajes de alto nivel como C. En el lenguaje de alto nivel esto es a veces ayudado por funciones intrínsecas del compilador que mapean directamente a los mnemónicos del SIMD, pero sin embargo resulta en una conversión de ensamblador de uno a uno para un procesador de vector asociado
   
*es requerida la optimización extrema, ej, en un bucle interno en un algoritmo intensivo en el uso del procesador. Los programadores de juegos toman ventaja de las habilidades de las características del hardware en los sistemas, permitiendo a los juegos correr más rápidamente. También las grandes simulaciones científicas requieren algoritmos altamente optimizados, ej, álgebra lineal con BLAS10 15 o la transformada de coseno discreta (ej, la versión SIMD en ensamblador del x264,16 (una biblioteca para codificar streams de video)
   
*un sistema con severas limitaciones de recursos (ej, un sistema empotrado) debe ser codificado a mano para maximizar el uso de los limitados recursos; pero esto está llegando a ser menos común a medida que el precio del procesador decrece y el desempeño mejora
   
*no existe ningún lenguaje de alto nivel, en un procesador nuevo o especializado, por ejemplo
   
*escribiendo programas de tiempo real que necesitan sincronización y respuestas precisas, tales como sistemas de navegación de vuelo, y equipo médico. Por ejemplo, en un sistema fly-by-wire (vuelo por mandos eléctricos), la telemetría debe ser interpretada y hay que actuar dentro de limitaciones estrictas de tiempo. Tales sistemas deben eliminar fuentes de retrasos impredecibles, que pueden ser creados por (algunos) lenguajes interpretados, recolección de basura automática, operaciones de paginación, o multitarea preventiva. Sin embargo, algunos lenguajes de alto nivel incorporan componentes de tiempo de ejecución e interfaces de sistema operativo que pueden introducir tales retrasos. Elegir el ensamblador o lenguajes de bajo nivel para tales sistemas da a los programadores mayor visibilidad y control sobre el proceso de los detalles
   
*es requerido control total sobre el ambiente, en situaciones de seguridad extremadamente alta donde nada puede darse por sentado.
   
*se escriben virus de computadora, bootloaders, ciertos drivers de dispositivo, u otros elementos muy cerca del hardware o al sistema operativo de bajo nivel
   
*se escriben simuladores del conjunto de instrucciones para monitoreo, trazado y depuración de errores donde la sobrecarga adicional es mantenida al mínimo
   
*se hace ingeniería inversa en binarios existentes que pueden o no haber sido escritos originalmente en un lenguaje de alto nivel, por ejemplo al crackear la protección anticopia del software propietario.
   
*se hace ingeniería inversa y modificación de video juegos (también denominado ROM hacking), que es posible por medio de varios métodos. El más ampliamente implementado es alterando el código del programa a nivel de lenguaje ensamblador
   
*se escribe código automodificable, algo para lo que el lenguaje ensamblador se presta bien
   
*se escriben juegos y otros softwares para calculadoras gráficas17
   
*se escribe software compilador que genera código ensamblador, y por lo tanto los desarrolladores deben ser programadores de lenguaje ensamblador
   
*se escriben algoritmos criptográficos que siempre deben tomar estrictamente el mismo tiempo para ejecutar, previniendo ataques de tiempo

Pueden leer mas acerca del lenguaje en la Wikipedia You are not allowed to view links. Register or Login.

Que ASM elegir??

Si leiste la wikipedia sabras que el lenguaje ensamblador se ensambla :B y que cada ensamblador posee pequeñas modificaciones en el lenguaje si bien se mantiene la misma idea.

Para elegir el ensamblador en el que vas a programar primero podes omitir los ensambladores que no te sirven.

Dado que la mayoria de los codigos ASM no son portables tenes que conocer en que sistema operativo vas a trabajar y el procesador de la maquina en que se ejecute el programa, una ves tengas esa informacion podes fijarte que ensamblador no te sirve.

Por ejemplo alguno de los mas conocidos son FASM, TASM, MASM y NASM (hay mas)

TASM y MASM no sirven en sistemas no Windows, ademas TASM no soporta la arquitectura x86-64.

Podes ver una comparativa de emsambladores You are not allowed to view links. Register or Login y con posibilidad de ver mas informacion en la inglesa.

Una ves tengas los ensambladores posibles elegidos podes informarte de sus caracteristicas para ver si te convence alguno en especial, pero si no sabes ingles lo mas importante es que busques previamente si podes encontrar basta informacion hacerca del mismo, si no la hay, tendrias que descartarlo porque es uno de los puntos mas importantes, y si mas o menos te manejas con el ingles, y no te decidis podes ver si existe buena documentacion oficial que seria lo ideal, y mejor aun si tiene soporte oficial, alguna especie de foro o mail list para hacer tus preguntas. Si aun no te decidis tira un random y ya esta ok?.

Los invito a comenzar a aprender ASM, postear sus dudas, sus codigos y sus tutoriales.

Tambien los invito a los que ya saben a que mejoren este post para atraer a la gente nueva a estudiar este lenguaje, pongan sus sugerencias y criticas en las respuestas.

Saludos



Desconectado Stuxnet

  • Me das tu password?
  • **
  • Mensajes: 364
  • Sexo: Masculino
  • I'm not a hacker, I'm a lover to the informatica
    • Ver Perfil
    • Stuxnet
Re:Informacion sobre ASM
« Respuesta #1 en: Enero 27, 2012, 07:04:01 pm »
Muy interesante y muy útil para la Ingeniería Inversa

Buen Post

saludos

 ;D
You are not allowed to view links. Register or Login

You are not allowed to view links. Register or LoginYou are not allowed to view links. Register or Login


xx
informacion sobre IP

Iniciado por Clover!

1 Respuestas
1158 Vistas
Último mensaje ſeptiembre 04, 2010, 01:13:08 pm
por .xAk.
question
informacion sobre los troyanos

Iniciado por koketoke20

2 Respuestas
1171 Vistas
Último mensaje Enero 29, 2011, 05:07:00 am
por .:.IlcOn14.:.
xx
Informacion sobre java

Iniciado por Pown

1 Respuestas
1119 Vistas
Último mensaje Febrero 20, 2010, 04:31:59 pm
por WaesWaes
xx
Información sobre clickjacking

Iniciado por seth

3 Respuestas
1406 Vistas
Último mensaje Abril 26, 2010, 04:33:29 am
por fedevcpss
question
Información sobre intrusiones.

Iniciado por xxaavvii95

0 Respuestas
1159 Vistas
Último mensaje Mayo 10, 2011, 02:40:10 pm
por xxaavvii95
xx
informacion sobre el blacktrack

Iniciado por sarabanda

12 Respuestas
2635 Vistas
Último mensaje Marzo 28, 2009, 06:22:32 pm
por sarabanda
question
necesito informacion sobre la ip

Iniciado por vitoko_viajero

1 Respuestas
1136 Vistas
Último mensaje Agosto 30, 2007, 08:29:05 pm
por RaKi0N
question
AYUDA - Información sobre vBulletin

Iniciado por h4rc0d

1 Respuestas
818 Vistas
Último mensaje Febrero 09, 2010, 10:37:13 am
por shevchenko
xx
alguno abe informacion sobre hack

Iniciado por spawn_mty

2 Respuestas
1643 Vistas
Último mensaje Junio 03, 2010, 08:52:20 pm
por spawn_mty
question
Informacion sobre Bifrost y SubSeven

Iniciado por wachusnein

2 Respuestas
905 Vistas
Último mensaje Abril 21, 2011, 12:56:46 pm
por Kodeinfect