Einfache Überprüfung von Intel Assembly Opcodes unter Linux

Ich habe nach einem praktischen Tool gesucht, mit dem die Opcodes von 64-Bit- oder 32-Bit-Befehlen von Intel unter Linux gedruckt werden können, z. so etwas wieHiew's Assembler unter DOS. Ein webbasierter Dienst wäre auch eine Option.

Da ich keine finden konnte, habe ich meine eigene gemachtbash Skript, das eine Assembly-Quelldatei aus Befehlszeilenparametern (Anweisung [en] und <32/64>) erstellt, kompiliert, verknüpft und zerlegt und die korrekten Zeilen für die Zerlegung anzeigt. Aber gibt es schon ein Programm, das zeigen würdealles die möglichen Kodierungen für einen gegebenen Befehl, z. zummov eax,ebx? Mein Ansatz mitnasm, ld undndisasm offensichtlich gibt es nur eine mögliche Kodierung für jeden Befehl.

Mit diesem Skript kann ich die Kodierungen abrufen, die von verwendet werdennasm für 64- und 32-Bit-Code, zB:

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

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

Aber wie könnte ich einfach alle möglichen Opcode-Codierungen bekommen? Gibt es dafür schon ein Programm?

Hier ist der Code:

#!/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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage