如何使用objcopy从aarch64架构二进制文件中提取shellcode?
问题解答
你对objcopy的使用完全正确,看不到1和2的直接对应值是AArch64架构的指令编码规则导致的,和转换步骤无关。
原理说明
- 你生成的
simple.bin长度为8字节,正好对应两条4字节长度的AArch64指令:- 前4字节
21 00 80 d2是小端存储的mov x1, #1指令编码,按大端整合成32位指令值为0xd2800021 - 后4字节
41 00 80 d2是小端存储的mov x1, #2指令编码,按大端整合成32位指令值为0xd2800041
- 前4字节
- AArch64的
MOV立即数指令(MOVZ型)采用位域拆分编码,16位立即数没有存在连续的字节位置,而是拆分到指令的不同位段中,因此直接查看二进制字节不会出现连续的0x01、0x02值,属于正常情况。
验证方法
你可以执行以下命令反汇编目标文件确认指令正确性:
objdump -d simple.o
输出内容会明确显示两条mov指令,证明你的汇编、转换流程完全正常。
提取shellcode
你当前生成的simple.bin就是有效shellcode,执行以下命令可以直接导出为hex格式的shellcode字符串:
xxd -p simple.bin | tr -d '\n'
得到的结果210080d2410080d2就是你需要的shellcode。
内容的提问来源于stack exchange,提问作者prgbenz
相关产品推荐
相关产品推荐

