resueltos principiantes practico para lista kali ejercicios ejemplos curso completo completa comandos basicos documentation assembly x86 x86-64 doc

documentation - practico - manual de debian para principiantes



Consejos para aprender Linux x86-64 montaje y documentación (3)

Consejo general:

No es solo el "ensamblador x86". Cada ensamblador es un poco diferente y generalmente no son compatibles entre sí. Recomiendo el ensamblador NASM porque es muy utilizado, fácil de instalar y es compatible con el ensamblaje de 64 bits.

Lea un buen libro sobre el ensamblador x86 para familiarizarse con los conceptos básicos (registros, saltos condicionales, aritmética, etc.). Leí El arte de la asamblea de Randall Hyde cuando estaba empezando.

here parece que tiene algunos buenos tutoriales con los que quizás quiera trabajar. Pero si está ensamblando en modo de 64 bits, tenga en cuenta que la convención de llamada para funciones C y syscalls es diferente.

Necesitará los manuales de referencia de la CPU. Personalmente, prefiero los de AMD. Desea los volúmenes 1 y 3 del manual de la CPU. Los otros volúmenes también pueden ser de interés.

Consejo específico de 64 bits.

El conjunto de 64 bits x86 es casi igual al conjunto de 32 bits x86, ya que 64 bits x86 es en su mayoría compatible con versiones anteriores de 32 bits. Obtiene acceso a los registros de 64 bits y algunas otras funciones, algunas instrucciones poco claras ya no son válidas, y el resto es igual a 32 bits.

Sin embargo, la convención syscall es completamente diferente en 64bit Linux. Dependiendo de su kernel, los syscalls de 32 bits pueden o no estar disponibles. Lo que es peor es que la convención de llamadas de 64 bits está mal documentada. Solo lo descubrí examinando las profundidades del código fuente de glibc.

Para ahorrarle la molestia de encontrar esto por el camino difícil, los números de syscall están en el código fuente de Linux en arch/x86/include/asm/unistd_64.h . El número de syscall se pasa en el registro rax . Los parámetros están en rsi , rsi , rdx , r10 , r8 , r9 . La llamada se invoca con la instrucción syscall . El syscall sobrescribe el registro rcx . La devolución está en rax . (Un breve ejemplo se puede encontrar here .)

¿Alguien tiene documentación relacionada con el aprendizaje de los fundamentos del ensamblado de Linux x86-64? No estoy seguro de si debo aprenderlo o no, o aprender x86 primero, y luego aprenderlo, pero como tengo una computadora x86-64 y no una x86, estaba pensando en aprender x86-64 en su lugar; )

Quizás alguien pueda darme algún incentivo y dirección para aprender qué, cómo y con qué documentación.

Por favor, dame tus títulos de documentación más favoritos, codifico un poco de Python, este es mi primer intento de un lenguaje de nivel inferior y estoy más que listo para dedicarme a él.

Gracias a todos


Eche un vistazo here , es el mejor lugar para el desarrollo de ensamblajes de Linux, encontrará recursos, documentos y enlaces.


La referencia canónica a x86 es probablemente el Manual del desarrollador de software Intel® 64 e IA-32 Architectures . Todavía tengo un par de volúmenes de esta serie, de cuando la P III era nueva. También hay un Manual del Programador de Arquitectura AMD64 , que podría ser interesante porque Intel no siguió completamente el liderazgo de AMD en el diseño x86-64, pero no lo he leído.

El código de operación y la referencia de instrucciones de X86 es exactamente como lo anuncian: códigos de operación e instrucciones de x86 (-64) y nada más. Práctico si quieres buscar alguna instrucción en particular muy rápido.