top of page

Resumen Introduction to x64 Assembly

Introducción

Durante años, los programadores de PC utilizan ensamblador x86 para escribir código de rendimiento crítico. Sin embargo, las PC de 32 bits están siendo reemplazadas por otras de 64 bits, y el código de montaje subyacente ha cambiado.

x64 es un nombre genérico para las extensiones de 64 bits a Intel y la arquitectura del conjunto de instrucciones x86 de 32 bits de AMD (ISA). AMD presentó la primera versión de x64, x86-64 inicialmente llamada y más tarde rebautizado AMD64.

El montaje se utiliza a menudo para piezas de rendimiento crítico de un programa, aunque es difícil de superar a un buen compilador de C ++ para la mayoría de los programadores.

Conocimiento de la asamblea es útil para depurar código - a veces un compilador hace el código de montaje incorrecto y recorrer el código en un depurador ayuda a localizar la causa.

Optimizadores de código a veces cometen errores. Otro uso para el montaje de interfaz con una o fijación de código para el que no tiene el código fuente.

Desmontaje le permite cambiar / corregir ejecutables existentes. El montaje es necesario si se quiere saber cómo su lengua de la opción funciona bajo el capó - por qué algunas cosas son lentos y otros son rápidos.

Finalmente, el conocimiento código de montaje es indispensable en el diagnóstico de malware.

Arquitectura

Cuando el aprendizaje de montaje para una plataforma determinada, el primer lugar para comenzar es aprender el conjunto de registros.

Arquitectura general Dado que los registros de 64 bits permiten el acceso de muchos tamaños y ubicaciones, se define como un byte de 8 bits, como una palabra de 16 bits, una palabra doble con 32 bits, una palabra cuádruple como 64 bits, y un doble quadword como 128 bits.

SIMD Arquitectura Single Instruction Multiple Data (SIMD) instrucciones se ejecutan un solo comando en varios fragmentos de datos en paralelo y son un uso común para las rutinas de ensamblaje.

Herramientas

Montadores Una búsqueda en Internet revela los ensambladores compatibles con x64, como el Netwide ensamblador NASM, una reescritura NASM llamada YASM, el ayuno plana ensamblador FASM, y el tradicional Microsoft MASM. Hay incluso un IDE libre para x86 y x64 asamblea llamada WinASM. Cada ensamblador tiene soporte variable para las macros y sintaxis otros ensambladores, pero el código de montaje no es en todos los ensambladores como C ++ o Java * son compatibles fuente.

C / C ++ compiladores Compiladores de C / C ++ a menudo permiten el montaje incrustar en el código ensamblador en línea usando, pero Microsoft Visual Studio * C / C ++ eliminan este código x64, que pueda facilitar la tarea del optimizador de código. Esto deja dos opciones: utilizar archivos separados de montaje y un ensamblador externa, o las características intrínsecas de uso del archivo de cabecera "intrn.h" (véase Birtolo y MSDN). Otros compiladores cuentan con opciones similares. Algunas razones para utilizar las características intrínsecas:

  • asm en línea no admite en x64.

  • Facilidad de uso: se puede usar nombres de variables en lugar de tener que hacer malabares asignación de registros de forma manual.

  • Más multiplataforma de montaje: el fabricante del compilador pueden portar los intrínsecos a distintas arquitecturas.

  • El optimizador funciona mejor con los intrínsecos.

Fundamentos de instrucción Los modos de direccionamiento Antes de cubrir algunas instrucciones básicas, es necesario comprender los modos de direccionamiento, que son formas de una instrucción puede tener acceso a los registros o la memoria.

Los siguientes son los modos de direccionamiento común con ejemplos:

Inmediata: el valor se almacena en la instrucción. ADD EAX, 14; añadir 14 a 32 bits EAX Registrarse para registro de adición R8L, AL; añadir 8 bits AL en R8L Indirecta: esto permite el uso de un desplazamiento 8, 16, o 32 bits, cualquier registros de propósito general para la base y el índice, y una escala de 1, 2, 4, 8 o para multiplicar el índice. Técnicamente, estos también pueden tener el prefijo segmento FS: o GS: pero esto rara vez se requiere. MOV R8W de 1234 [8 * RAX + RCX]; mover palabra en la dirección 8 * RAX + + RCX 1234 en R8W

Hay muchas maneras legales para escribir esto. Los siguientes son equivalentes MOV ECX, mesa dword ptr [RBX] [RDI] MOV ECX, mesa dword ptr [RDI] [RBX] MOV ECX, mesa dword ptr [RBX + RDI] MOV ECX, dword ptr [Tabla RBX + + RDI] El PTR DWORD indica al ensamblador cómo codificar la instrucción MOV. RIP-direccionamiento relativo: esto es nuevo para x64 y permite el acceso tablas de datos y tal en el código en relación con el puntero de la instrucción actual, haciendo código independiente de posición más fácil de implementar. MOV AL, [RIP]; PIR apunta a la siguiente instrucción NOP también conocido como NOP Por desgracia, MASM no permite esta forma de código de operación, pero otros ensambladores como FASM y YASM hacer. En su lugar, MASM incrusta RIP-direccionamiento relativo implícitamente. MOV EAX, TABLE; RIP utiliza en relación abordar para obtener dirección de la tabla.

Casos especiales: algunos códigos de operación utilizan registros en formas únicas basadas en el código de operación. Por ejemplo, firmado división entera IDIV en un valor de operando de 64 bits divide el valor de 128 bits en RDX: RAX por el valor, almacenando el resultado en RAX y el resto en RDX.

Conjunto de instrucciones

Una instrucción común es la instrucción LOOP, la cual disminuye RCX, ECX, o CX dependiendo del uso, y luego salta si el resultado no es 0.

Sistemas operativos

Sistemas de 64 bits permiten hacer frente a las 2 bytes de potencia 64 o de datos en la teoría, pero sin chips actuales permiten el acceso a los 16 exabytes (18, 446,744, 073, 709, 551, 616 bytes).

Convenciones de Llamada Interfaz con las librerías del sistema operativo requiere el conocimiento de cómo pasar parámetros y gestionar la pila. Estos detalles sobre una plataforma se denominan una convención de llamada.

Conclusión

Este ha sido una necesariamente breve introducción a la programación en ensamblador x64.


Entradas destacadas
Vuelve pronto
Una vez que se publiquen entradas, las verás aquí.
Entradas recientes
Archivo
Buscar por tags
No hay tags aún.
Síguenos
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square

Fecha de creacion- Enero 27 Miercoles 2016

bottom of page