如何使用 objcopy 从 aarch64 二进制文件中转储 shellcode?

how do I dump the shellcode from an aarch64 binary with objcopy?

我有一个简单的汇编代码(aarch64)如下,

 mov x1, #1
 mov x1, #2

我想把它转换成 shellcode。

我做了什么:

#> as simple.s -o simple.o
#> objcopy -O binary simple.o simple.bin

之后我查看了with xxd

的内容
#> xxd simple.bin

然而,结果二进制中似乎没有值 1 和 2。

0000000: 2100 80d2 4100 80d2                      !...A...

我是不是用错了objcopy?

A​​RM 指令是 32 位小端字,因此如果以这种格式转储它们会更容易阅读。使用 xxd -e simple.bin 输出:

00000000: d2800021 d2800041                    !...A...

这是 movz 指令的正确编码,请参阅 ARMv8 体系结构参考手册。 16 位立即数在位 5-20 中编码,这就是为什么数字 1 和 2 在十六进制表示中不是很明显,但它们就在那里。 (位 0-4 编码目标寄存器。)它们在二进制中更容易看到,但 xxd 似乎没有 32 位小端二进制模式。

所以你的输出文件是完全正确的。