Skip to content

Latest commit

 

History

History
152 lines (114 loc) · 7.4 KB

README_zh.md

File metadata and controls

152 lines (114 loc) · 7.4 KB

ARM64汇编模拟器

ARM64 GitHub stars GitHub watchers GitHub forks GitHub followers Twitter Follow

GitHub top language Python Code Style GitHub language count GitHub code size in bytes GitHub repo size GitHub tag GitHub commit activity GitHub last commit GitHub contributors GitHub issues GitHub closed issues GitHub pull requests GitHub closed pull requests GitHub

一个轻量级的ARM64汇编代码和内存模拟器,用于解析和执行ARM64汇编指令,通常是由IDA Pro的反汇编生成的.s文件。

[中文说明] [English]

目录

概述

该存储库包含一个轻量级的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

使用方法

  1. 将包含ARM64汇编代码的.s文件放置在src/samples目录中。
  2. 使用以下命令运行模拟器: IDA diasm.s memory.s
cd arm64_simulator
python arm64_simulator.py

寄存器 内存 运行

配置

你可以在 arm64_simulator.py 文件中修改 ARM64Simulator 类的实例化,根据你的分析需求启用逐步执行或详细输出。

  1. 基础设置与执行:
# 读取汇编代码和内存设置
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

如果对此项目有任何问题或反馈,请随时与我联系。