Легко проверять коды операций сборки Intel в Linux
Я искал практический инструмент, который печатал бы коды операций любой 64-битной или 32-битной инструкции Intel в Linux, например. что-то вродеHiew's
ассемблер в дос. Веб-сервис также будет одним из вариантов.
Как я нене могу найти ни одного, я сделал свой собственныйbash
скрипт, который создает исходный файл сборки из параметров командной строки (инструкция [s] и <32/64>), компилирует, связывает и разбирает его и показывает правильные строки разборки. Но есть ли уже какая-то программа, которая показала бывсе возможные кодировки для любой данной инструкции, например. заmov eax,ebx
? Мой подход с использованием,nasm
ld
а такжеndisasm
очевидно, дает только одну возможную кодировку для каждой инструкции.
С помощью этого скрипта я могу получить кодировки, используемыеnasm
для 64 и 32-битного кода, например:
/home/user/code/asm$ showop 'nop;add eax,ebx;cpuid' 64
00000000 90 nop
00000001 01D8 add eax,ebx
00000003 0FA2 cpuid
Но как я мог легко получить все возможные кодировки кода операции? Для этого уже есть какая-нибудь программа?
Вот's код:
#!/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