在linux内核里面有很多脚本工具,位于linux/scripts/。里面有一个decodecode工具可以用来转换机器码,用法如下:
比如在arm64机器上有一行armv8的机器码:f2a800e8,将其翻译成汇编。
:$ echo "Code: f2 a8 00 e8" > code
:$ ./decodecode < code
Code starting with the faulting instruction
===========================================
0: f2a800e8 movk x8, #0x4007, lsl #16
注意指令字节之间留一个空格,以“Code:"作为起始,当然这个起始标记一个文件只需一个即可, 比如:
Code: e8 00 a8 f2 08 00 98 f2 a9 54 eb d2 a9 54 cb f2 a9 54 ab f2 a9 54 8b f2 09 25 81 a8 1f 01 01 eb cb ff ff 54 eb ff ff 17 cc 3e 00 00 00 00 00 00 e5 03 1e aa 00 06 a0 d2 6c 03 00 94 a0 00 5f d6 1f 10 1c d5 00 11 3c d5 00 00 7d b2 00 00 7c b2
当然脚本认为该机器码是跟host结构相同的原生机器码,想要跨架构的翻译还是不行的。