El sistema no entiende el código de ensamblaje.
El código de ensamblaje es una representación legible por humanos del código de máquina. También tiene detalles como etiquetas legibles en lugar de direcciones. La CPU no puede entender el código de ensamblaje.
Se parece a esto: (pellizcado de Hello, world!)
- ¿Cuáles son las habilidades más importantes de un emprendedor TECH?
- ¿Existe alguna correlación entre la capacidad del desarrollador y el eclipse vs vim?
- Tengo 3.5 años de experiencia en pruebas de software. ¿Cuál es una buena idea sobre cómo reanudar mi carrera de pruebas de software después de 3 años de descanso?
- Cómo aprender JavaScript lo más rápido posible y qué tecnologías relacionadas son las mejores para aprender, de modo que pueda comenzar a desarrollar aplicaciones web potentes
- ¿Los currículums de ingenieros de software deben incluir el impacto financiero de los proyectos?
sección .text
global _start; debe declararse para el enlazador (ld)
_start:; decir el punto de entrada del enlazador
mov edx, len; longitud del mensaje
mov ecx, msg; mensaje para escribir
mov ebx, 1; descriptor de archivo (stdout)
mov eax, 4; número de llamada del sistema (sys_write)
int 0x80; núcleo de llamada
mov eax, 1; número de llamada del sistema (sys_exit)
int 0x80; núcleo de llamada
sección .data
msg db ‘¡Hola, mundo!’, 0xa; nuestra querida cadena
len equ $ – msg; longitud de nuestra querida cadena
El código de máquina es en lo que un ensamblador convierte el lenguaje ensamblador. El código de máquina es lo que la CPU entiende de forma nativa. Estos son los bytes / bits sin procesar que podría observar dentro de ROM / RAM que la CPU leerá y ejecutará.
Si hiciera un volcado hexadecimal de código de máquina, se vería así (tenga en cuenta que esto no es * una * representación del código anterior, sino galimatías al azar):
cd 80 32 54 0a cd 80 40 31 34 65 8f
Hay un nivel intermedio que es el código objeto. Este es un ensamblador traducido al código de máquina, sin embargo, contiene un poco más que eso. Estrictamente hablando, el código objeto todavía no es código máquina, ya que aún contendría etiquetas. El vinculador convierte un montón de archivos de objetos y bibliotecas en un archivo ejecutable y normalmente elimina todas las etiquetas a medida que se resuelven.
Si somos realmente pedantes, un ejecutable todavía no es código de máquina: un ejecutable solo se convierte en código de máquina una vez que se carga en la memoria y se han resuelto todas las referencias externas (DLL / bibliotecas dinámicas).