gpt4 book ai didi

linux - 在 Linux 中轻松检查 Intel 汇编操作码

转载 作者:太空狗 更新时间:2023-10-29 11:15:36 24 4
gpt4 key购买 nike

我一直在寻找一种实用工具,它可以在 Linux 中打印任何 Intel 64 位或 32 位指令的操作码,例如。类似 Hiew's 的东西DOS 中的汇编程序。基于网络的服务也是一种选择。

因为我找不到任何东西,所以我制作了自己的 bash 脚本,它根据命令行参数(指令 [s] 和 <32/64>)创建一个汇编源文件,编译、链接和反汇编它并显示正确的反汇编行。但是是否已经有一些程序可以显示所有 任何给定指令的可能编码,例如。对于 mov eax,ebx?我使用 nasmldndisasm 的方法显然只为每条指令提供了一种可能的编码。

通过这个脚本,我可以获得 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

但是我怎样才能轻松获得所有可能的操作码编码呢?是否已经有一些可用的程序?

代码如下:

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

最佳答案

反汇编程序,例如 libdisasmudis86通常带有操作码查找表。

udis86 还附带一个命令行工具 (udcli),您可以向其输入十六进制字节,它会为您提供解码版本。

关于linux - 在 Linux 中轻松检查 Intel 汇编操作码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12476548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com