我需要用 C 解码 ARM(ARM926EJ) 指令。我有 32 位十六进制指令。我想解码并获取操作码操作数。任何人都知道这方面的任何好材料。
注意我查看了 QEMU translate.c 文件。但它是如此复杂,甚至不知道为什么要做什么。
我需要用 C 解码 ARM(ARM926EJ) 指令。我有 32 位十六进制指令。我想解码并获取操作码操作数。任何人都知道这方面的任何好材料。
注意我查看了 QEMU translate.c 文件。但它是如此复杂,甚至不知道为什么要做什么。
假设您不想/不能使用程序为您执行此操作,您可以参考ARM 参考手册。
其中有专门用于指令编码的部分。
我使用结合了 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