如何使用 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?
ARM 指令是 32 位小端字,因此如果以这种格式转储它们会更容易阅读。使用 xxd -e simple.bin
输出:
00000000: d2800021 d2800041 !...A...
这是 movz
指令的正确编码,请参阅 ARMv8 体系结构参考手册。 16 位立即数在位 5-20 中编码,这就是为什么数字 1 和 2 在十六进制表示中不是很明显,但它们就在那里。 (位 0-4 编码目标寄存器。)它们在二进制中更容易看到,但 xxd 似乎没有 32 位小端二进制模式。
所以你的输出文件是完全正确的。
我有一个简单的汇编代码(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?
ARM 指令是 32 位小端字,因此如果以这种格式转储它们会更容易阅读。使用 xxd -e simple.bin
输出:
00000000: d2800021 d2800041 !...A...
这是 movz
指令的正确编码,请参阅 ARMv8 体系结构参考手册。 16 位立即数在位 5-20 中编码,这就是为什么数字 1 和 2 在十六进制表示中不是很明显,但它们就在那里。 (位 0-4 编码目标寄存器。)它们在二进制中更容易看到,但 xxd 似乎没有 32 位小端二进制模式。
所以你的输出文件是完全正确的。