我需要在C中解码ARM(ARM926EJ)指令。我有十六进制的32位指令。我想解码并获取操作码操作数。任何人都知道任何好的材料。
N.B。我查看了QEMU的translate.c文件。但它如此复杂,甚至不知道为什么要做什么。
答案 0 :(得分:5)
假设您不想/不能使用程序为您执行此操作,您可以参考ARM Reference Manual。
其中有一些专门用于指令编码的部分。
答案 1 :(得分:4)
我使用一个结合了gas和objdump的脚本来为我做这个。我确信有更好的方法,但这对我有用。
#!/bin/sh
cat > /tmp/foo.S <<EOF
.text
.arm
.word $1
EOF
arm-linux-gnueabi-as /tmp/foo.S -o /tmp/foo.o
echo "ARM: " `arm-linux-gnueabi-objdump -d /tmp/foo.o | grep " 0:"`
echo "Thumb:" `arm-linux-gnueabi-objdump --disassembler-options=force-thumb -d /tmp/foo.o | grep " 0:"`
rm -rf /tmp/foo.o /tmp/foo.S