Tutorial sobre ensamblador para ARM

ARM assembly Mientras la arquitectura x86/x64 es la reina del microprocesador para ordenadores personales, ARM la es para dispositivos móviles y de bajo consumo. El entender el sistema a bajo nivel no es quizás uno de los requisitos para un programador web, pero sí lo es para escritores de exploits, o conducir tareas de ingeniería inversa. En este caso, tener un buen control y entendimiento del lenguaje ensamblador es esencial.
Leer más

Aprender a programar un Terminator y a Bender de Futurama (o también como aprender a programar un MOS 6502)

Link Con el auge de la IA ya sabemos que Skynet está cerca y con ella los famosos Terminator. Como todos sabéis los Terminator están programados con este procesador así que es el momento perfecto para aprender a programar un MOS 6502 y así poder re-programarlo y convertirlo en un Roomba. También nos puede ayudar a programar a nuestro querido Bender de Futurama como podéis ver en la imagen que encabeza este post.
Leer más

Aprende ensamblador dibujando pixeles

Aprender a jugando es probablemente la mejor forma de aprender. Esto es aplicable, yo diría, que a cualquier materia. En este caso la idea es aprender ensamblador o más bien la “forma de pensar” cuando nos sentamos a escribir código en ensamblador, ya que dependiendo de la arquitectura dicho lenguaje varía, pero las formas y metodología es prácticamente la misma. En box-256.com podemos pasar un buen rato jugando con un sistema ficticio de 8bits, con 256 bytes de memoria, 16 colores y pantalla de 16x16.
Leer más

Introducción a la programación ensamblador para Amiga

Amiga, un viejo conocido de Cyberhades y amado incondicionalmente por el que escribe, fue un ordenador revolucionario a mediados/finales de los 80s, principalmente por el potencial gráfico y el sistema operativo AmigaOS. Desde Reaktor nos traen una entrada muy didáctica sobre como programar en ensamblador para dicho sistema. La entrada comienza con la preparación del sistema, en el que usa el emulador FS-UAE (por lo que no necesitas tener un Amiga físicamente), la ROM Kickstart 1.
Leer más

Destripando una instrucción en lenguaje ensamblador X86

La función más importante en un desensamblador es la conversión o recomposición de las instrucciones en lenguaje ensamblador a partir de los códigos de operacion (OP / operation code). En la arquitectura X86, a diferencia de otras, la longitud en bytes de una instrucción, varía dependiendo de la instrucción en sí y de los operandos sobre las que ésta actúa. Últimamente, gracias en entre otros a proyectos como Capstone hemos visto el lanzamiento de desensambladores de todo tipo, así como la migración o adaptación de desensambladores previamente existentes a este motor.
Leer más

Introducción a la arquitectura y programación sobre ARM

Cada vez son más los dispositivos que salen al mercado con procesadores ARM. No sólo teléfonos móviles y tabletas, sino dispositivos embebidos y pequeños como Raspberry Pi, Beaglebone, etc también incorporan dicha arquitectura. Si estás interesado en aprender más sobre ARM, este tutorial está dividido en dos partes: Introduction to ARM y Efficient C for ARM. El índice de la primera parte: Introduction to ARM, es el siguiente: Start Why Learn Assembly Language?
Leer más

Conversor de códigos de operación a instrucciones ensamblador online

Hemos visto en otras ocasiones desensambladores y ensambladores online que no permiten tanto escribir nuestro código como el subir un fichero binario y obtener el resultado. En este caso la herramienta de la que os hablo, por ahora, sólo nos permite escribir código en hexadecimal (opcodes - códigos de operación), y ésta la convierte a las instrucciones ensamblador a las que dichos códigos corresponden. La herramienta se llama CEnigma y usa el framework de desensamblado quizás más moderno, Capstone.
Leer más

Vídeo tutoriales sobre introducción a la programación en ensamblador

Aquí tenéis una buena colección de vídeos muy cortos y específicos sobre programación en ensamblador x86 (Windows). Son tutoriales de iniciación muy instructivos. Tratan desde instalación del entorno que necesitas para seguir los ejemplos, conceptos básicos, pero indispensables en el entorno ensamblador, hasta ejemplos específicos de diferentes instrucciones. El autor de los vídeos Rasim Muratovic, usa como base para los mismos el libro Assembly Language for x86 Processors. Introduction to Assembly Programming Language Assembly 1 - Installing MASM32 SDK Assembly 2 - Integer Constants Assembly 3 - Integer Expressions Assembly 4 - Real Number Constants Assembly 5 - Character Constants Assembly 6 - String Constants Assembly 7 - Reserved Words Assembly 8 - Identifiers Assembly 9 - Directives Assembly 10 - Directives - Part 2 - Defining Segments Assembly 11 - Instructions - Part 1 - Labels Assembly 12 - Instructions - Part 2 - Instructions Mnemonic Assembly 13 - Instructions - Part 3 - Operands Assembly 14 - Instructions - Part 4 - Comments Assembly 15 - Installing emu8086 and Printing Hello World!
Leer más

Simulador de ensamblador de 8 bits

Esta es otra pequeña joyita con la que me he topado y que a alguno le traerá buenos recuerdos del pasado. Simple 8-bit Assembler Simulator es pues eso, un simulador de ensamblador de 8 bits. Está basado en NASM, provee una sintaxis simplificada y emula el funcionamiento de un procesador x86. La CPU obviamente es de 8 bits y además disponemos de un mapa de memoria de 256 bytes, así como de 4 registros de propósito general.
Leer más

Compilador interactivo de C/C++

Cuando haces ingeniería inversa a un binario (del cual no dispones del código fuente), no es sólo importante tener conocimientos de ensamblador, la pila, montículo (heap), registros, etc sino también es importante conocer los pequeños trucos y patrones que usa el compilador/es a la hora de generar el código binario. ¿Cómo se traduce una instrucción if? ¿y un switch? ¿bucles? ¿operaciones con punteros? ¿arrays? ¿construtores/destructores en C++? ¿Intel, ARM? etc
Leer más