一个轻量级的ARM64汇编代码和内存模拟器,用于解析和执行ARM64汇编指令,通常是由IDA Pro的反汇编生成的.s
文件。
该存储库包含一个轻量级的ARM64汇编代码和内存模拟器,用于解析和执行ARM64汇编指令,通常是由IDA Pro的反汇编生成的.s
文件。它是一个理想的工具,用于了解ARM64指令的行为,特别适用于教育目的、安全分析和性能调优。
- 轻量级且独立: 易于部署和运行,无需重型依赖。
- 直接从IDA输出解析: 与IDA Pro生成的反汇编文件无缝集成。
- 详细的执行跟踪: 跟踪并显示每个指令执行后寄存器和内存状态的变化。
- 支持逐步和连续执行: 提供灵活的指令执行方式,以满足不同的分析需求。
- 模拟寄存器和内存操作: 通过实际模拟增强对ARM64操作的理解。
- 扩展性:支持自定义前后钩子(hooks),允许在指令执行前后插入自定义逻辑。
- 教育工具: 帮助学习和教授ARM64指令集的结构和应用。
- 原型设计和测试: 允许在实际实现之前快速模拟指令效果。
- 安全分析: 用于分析代码操作如何影响程序状态,可能发现安全漏洞。
- 性能分析: 帮助理解和优化对性能至关重要的代码。
确保您的计算机上安装了Python 3.x。此模拟器不需要任何额外的库进行基本操作。
将存储库克隆到本地计算机:
git clone https://github.com/suifei/arm64-assembly-simulator.git
cd arm64-assembly-simulator
cd arm64_simulator
python arm64_simulator.py
你可以在 arm64_simulator.py
文件中修改 ARM64Simulator
类的实例化,根据你的分析需求启用逐步执行或详细输出。
- 基础设置与执行:
# 读取汇编代码和内存设置
asm_data = read_file("samples/diasm.s")
asm_code = load_asm_code(asm_data)
memory_lines = read_file("samples/memory.s")
memory_data = parse_memory_lines(memory_lines)
# 初始化模拟器
vm = ARM64Simulator(memory_data, step_pause=False, verbose=True, output_file="samples/output.s")
# 运行模拟器,从指定的PC地址开始
vm.run(asm_code, pc=0x100AE0D64)
2.使用钩子修改指令行为:
# 定义一个后置钩子,将所有的CSET指令转换为NOP
def nop_ops_after_hook(vm, op_name, operands):
if op_name == "CSET":
print(f"AFTER-HOOK# {op_name} to NOP")
op_name = "NOP"
operands = []
return op_name, operands
# 设置模拟器输出文件
vm.set_output_file("samples/output_with_hooks.s")
# 添加钩子并重新运行模拟器
vm.hook_instruction(after=nop_ops_after_hook)
vm.run(asm_code, pc=0x100AE0D64)
要获取更多示例和深入了解模拟器的功能,请参考本仓库中的源代码。源文件中包含了详细的注释和多种使用案例,可以帮助您熟悉模拟器的高级功能和自定义选项。
欢迎贡献!请随时提交拉取请求,建议功能,或报告错误。
此项目根据 MIT 许可证授权 - 请查看 LICENSE 文件了解详情。
- c3VpZmUgQGdtYWlsIGRvdGNvbQ==
- QQ群: 555354813
如果对此项目有任何问题或反馈,请随时与我联系。