64位Linux环境下如何将ASM文件汇编为x86 shellcode?
本地提取x86汇编对应纯shellcode的方法
你可以通过以下两种简便方法直接获取纯shellcode,无需手动从ELF文件的固定偏移量提取内容:
方法一:直接用nasm生成纯二进制机器码
nasm支持直接输出无额外文件头的纯机器码,只需要指定输出格式为bin即可,不会生成ELF头、段表、符号表等多余元数据:
# 直接编译汇编文件为纯二进制文件 nasm -f bin chmod.asm -o chmod.bin
生成的chmod.bin就是你需要的纯机器码文件,接下来用一行命令即可转换为\x开头的shellcode格式:
xxd -p chmod.bin | sed 's/../\\x&/g' | tr -d '\n'
执行后输出的结果和你给出的示例shellcode完全一致。
方法二:从已生成的ELF目标文件中提取代码段
如果你已经生成了chmod.o格式的ELF32目标文件,可以用objcopy直接提取.text代码段,无需手动找偏移量:
# 仅提取elf32目标文件中的.text代码段,输出为纯二进制文件 objcopy -O binary --only-section=.text chmod.o chmod.bin
后续转换为\x格式的命令和方法一完全相同。
注意事项
- 64位Linux系统默认可能未安装nasm,Debian/Ubuntu系系统可执行
sudo apt install nasm安装 - 如果后续需要测试32位shellcode,需要提前安装32位运行库,比如
sudo apt install lib32c-dev
内容的提问来源于stack exchange,提问作者Pierre
相关产品推荐
相关产品推荐

