Comprobando fácilmente los códigos de operación de ensamblaje Intel en Linux

He estado buscando una herramienta práctica que imprima los códigos de operación de cualquier instrucción Intel de 64 bits o 32 bits en Linux, por ejemplo. algo comoHiew's ensamblador en DOS. Un servicio basado en la web también sería una opción.

Como no pude encontrar ninguna, hice mi propiabash El script, que crea un archivo fuente de ensamblaje a partir de los parámetros de la línea de comando (instrucciones [s] y <32/64>), lo compila, lo enlaza y lo desarma y muestra las filas correctas de desensamblaje. Pero ¿ya hay algún programa que mostrara?todos las posibles codificaciones para cualquier instrucción dada, ej. paramov eax,ebx? Mi enfoque utilizandonasm, ld yndisasm Obviamente solo da una posible codificación para cada instrucción.

Con este script puedo obtener las codificaciones utilizadas pornasm para código de 64 y 32 bits, por ejemplo:

/home/user/code/asm$ showop 'nop;add eax,ebx;cpuid' 64

00000000  90                nop
00000001  01D8              add eax,ebx
00000003  0FA2              cpuid

Pero, ¿cómo podría obtener fácilmente todas las posibles codificaciones de opcode? ¿Ya hay algún programa disponible para eso?

Aquí está el código:

#!/bin/bash

# usage: showop instructions bits

asminstr=$1
bits=$2

# asminstr="nop;nop;nop;nop;add eax,ebx;nop;nop;nop"
# bits=64

numberofinstr=`echo $asminstr | grep -o ";" | wc -l`
((numberofinstr++))

if [ -f tempasmfile.asm ]
    then
    rm tempasmfile.asm
fi
if [ -f tempobjfile.o ]
    then
    rm tempobjfile.o
fi
if [ -f tempexefile ]
    then
    rm tempexefile
fi

printf "[bits $bits]\nsection .text\nglobal _start\n\n_start:\n`echo $asminstr | sed 's/;/\\n/g'`\n" >tempasmfile.asm

nasm -f elf$bits tempasmfile.asm -o tempobjfile.o
ld tempobjfile.o -o tempexefile

if [ $bits -eq 32 ]
then
    ndisasm -b $bits -e 0x60 tempexefile | head -n $numberofinstr
elif [ $bits -eq 64 ]
then
    ndisasm -b $bits -e 0x80 tempexefile | head -n $numberofinstr
fi
rm tempasmfile.asm
rm tempobjfile.o
rm tempexefile

Respuestas a la pregunta(1)

Su respuesta a la pregunta