Cómo escribir y ejecutar mi propio código de máquina en mi computadora

Espero que estés en cualquier Linux y tengas un procesador x86_64. En este caso, lo siguiente lo ayudará.

Instale dos paquetes para eso:

sudo apt-get install build-essential nasm vim tmux

No necesita vim y tmux, pero estará trabajando en la línea de comandos y, por qué no, en la oportunidad, instale las herramientas del oficio y realmente trabaje allí en lugar de usar permanentemente el mouse para escapar y regresar.

hello_64.asm:

; proteger pila
% ifidn __OUTPUT_FORMAT __, elf64
sección .note.GNU-stack noalloc noexec nowrite progbits
%terminara si

sys_exit equ 60
sys_write equ 1

global _start; debe declararse para usar gcc
rel por defecto

sección .text
_start:; decir el punto de entrada del enlazador
mov edx, len; longitud del mensaje
mov esi, msg; mensaje para escribir
mov edi, 1; descriptor de archivo (stdout)
mov eax, sys_write; número de llamada del sistema (sys_write)
syscall; llamada kernel
xor edi, edi
mov eax, sys_exit; número de llamada del sistema (sys_exit)
syscall; llamada kernel

sección .rodata
msg db ‘¡Hola, mundo!’, 0xa; nuestra querida cadena
len equ $ – msg; longitud de nuestra querida cadena

Compilar y ejecutar:

> nasm -f elf64 hello_64.asm
> ld -m elf_x86_64 -s -o hello_64 hello_64.o
> ./hello_64
¡Hola Mundo!
> ls -l hello_64
-rwxr-xr-x 1 usuario usuario 504 20 de noviembre 14:58 hello_64 *

Solo otra nota aquí:

No use el ensamblador GNU, si está trabajando a mano. Esa cosa solo es buena como un backend C, pero no se puede usar como herramienta para un programador humano. Es una herramienta muy limitada, un ensamblador de una pasada, que no puede hacer la optimización más simple para usted. Se reduce a poner códigos en hexadecimal en algunos casos.

No lo uses

Y con eso no use la sintaxis de AT&T. El Gas es la única herramienta que lo necesita e incluso si intenta cambiar Gas a Intel, no funciona bien con eso. Solo use Nasm y aprenda la sintaxis de Intel, cambie todas las herramientas de la cadena a Intel, ese es mi consejo.

Gas / AT & T está jodiendo con las adiciones posteriores de códigos de operación e incluso combina las posiciones de origen y destino. Eso es malo, feo y no consistente.

Y antes de que tenga que reescribir toda su base de código de ensamblaje como tenía que hacer, simplemente comparto esta experiencia. No hagas eso. Comience con la sintaxis Intel, manténgase en la sintaxis Intel. Esta no es una pregunta orgullosa sobre Unix o no sobre el sistema Unix. AT&T fue solo una decisión antigua y Gas es un ensamblador antiguo. Muy limitado y tan malo, que incluso mi primer ensamblador, el “Data Becker Profi Ass 64” en mi C64 cuando era un adolescente era MEJOR que eso. Una cosa, que tenía un tamaño de 4 kb … Increíble.

Por lo tanto, no use gas.

Si desea ejecutar su “código de máquina propio” (o un código de máquina extraño) en su computadora, entonces necesita un programa emulador. Puedes escribirlo en C por ejemplo. Un muy buen ejemplo es el emulador “aDOSBox”. Puede descargar el “aDOSBox” de la red e instalarlo en una tableta Android. El programa emulará el código de máquina Intel 80 × 86 y el entorno DOS en la CPU ARM y el sistema Android. Cuando inicia el emulador, haciendo clic en su icono, puede usar la tableta como una PC IBM con sistema DOS.

Si entiende “código de máquina propio” en el sistema existente, entonces tiene que escribir un programa de ensamblaje y necesita un programa de ensamblador para traducirlo al código de máquina. O puede insertar una parte de código de máquina “propia codificada” en un programa de lenguaje de alto nivel, si está permitido …

Ya está ejecutando el código de la máquina, su navegador web, por ejemplo.

Si desea crear su propio código de máquina y ejecutarlo, obtenga un compilador de C. Puede usar otros compiladores, pero C es una especie de estándar de facto para hacer ejecutables simples.

Si está utilizando Windows, Pelles C es un buen lugar para comenzar.