HWSTARS 2024-06-05 07:48 采纳率: 0%
浏览 2

支持 sparc 的符号执行工具

请问有哪些符号执行工具是支持 sparc 的?
我在尝试过 angr 之后发现其对 sparc 的支持性并不很好.
如果有使用 angr 成功对 sparc 下的程序进行符号执行的,请教下是如何做到的?
如果angr真的不可行,有其他的工具可用吗?

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-05 07:48
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    关于支持SPARC架构的符号执行工具,以及angr对SPARC架构支持情况的问题,以下是我根据搜索结果得出的一些信息:

    1. angr对SPARC的支持情况

      • 根据CSDN博客[^9^],angr是基于libVEX开发的,目前支持ARM、MIPS、PPC和x86以及amd64架构。文中提到libVEX项目的研究者正在对SPARC架构进行移植工作,这意味着angr未来可能会支持SPARC架构,但目前可能还没有完全支持。
    2. 其他支持SPARC的符号执行工具

      • 搜索结果中没有直接提到除了angr之外,哪些符号执行工具支持SPARC架构。因此,如果angr对SPARC的支持不够好,可能需要考虑其他的二进制分析工具,或者等待angr对SPARC的官方支持。
    3. 使用angr进行SPARC架构程序符号执行的经验分享

      • 搜索结果中没有找到具体的案例或教程,说明如何使用angr成功对SPARC架构的程序进行符号执行。因此,这方面的经验可能需要在社区中进一步探索,或者通过实验和尝试来积累。
    4. 相关的代码实现和参考资料

      • 由于搜索结果中没有提供具体的代码实现和详细的参考资料,建议关注angr的官方文档和社区论坛,以获取最新的支持信息和使用技巧。
      • 可以参考的资料包括angr的官方文档[^5^]和GitHub仓库[^8^],以及CSDN等平台上的相关博客文章[^9^]。

    综上所述,目前angr对SPARC架构的支持可能还在开发中,没有明确的信息表明已经完全支持。如果需要对SPARC架构的程序进行符号执行,可能需要寻找其他的替代工具,或者关注angr的后续更新。同时,也建议积极参与社区讨论,以获取更多的使用经验和支持信息。

    评论 编辑记录
  • 码农阿豪@新空间 Java领域优质创作者 2024-06-05 07:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    针对问题:“请问有哪些符号执行工具是支持 sparc 的?”,回答如下: 支持 SPARC 架构的符号执行工具有以下几个:
    1. KLEE:KLEE 是一个开源的符号执行器,它支持多种指令集架构,包括 SPARC。可以通过在源代码中插入符号变量、断言和路径约束来进行符号执行。KLEE 支持基于 LLVM 的 IR,因此可以处理大多数 C/C++ 代码。
    2. Triton:Triton 是一个动态二进制分析框架,它支持多种 CPU 架构,包括 SPARC。它具有很强的动态符号执行功能,可以在运行时生成符号路径,支持指令级符号执行、内存符号执行等。Triton 还提供了反汇编和编译引擎,可以将汇编代码转换成机器码和 IR。
    3. Manticore:Manticore 是一个针对二进制程序的模糊测试工具,它支持多种 CPU 架构,包括 SPARC。它采用混合符号执行和模拟执行的方法,可以生成符号执行路径和反汇编代码,还可以自动生成测试用例。Manticore 可以处理不规则和复杂的程序,例如 CTF 比赛中的二进制挑战。 针对问题:“如果有使用 angr 成功对 sparc 下的程序进行符号执行的,请教下是如何做到的?”,回答如下: 根据 angr 官方文档的说明,angr 对 SPARC 架构的支持并不完善,并且只支持早期的 SPARC v7 和 v8 指令集。如果需要在 SPARC 架构上使用 angr 进行符号执行,首先需要确保目标程序可以正确地加载和解析,这通常需要使用一个适当的加载器。然后,需要手动编写一个符号执行路径来探索目标程序的不同分支和条件语句。由于 angr 没有针对 SPARC 的 IDA 插件或反汇编器,因此通常需要手动编写反汇编代码。 以下是一个简单的使用 angr 对 SPARC 程序进行符号执行的示例代码:
    import angr
    # 加载 SPARC 程序
    proj = angr.Project('/path/to/program', load_options={'auto_load_libs': False})
    # 创建符号状态,并设置输入数据为符号变量
    state = proj.factory.entry_state(args=['input'])
    input_data = state.solver.BVS('input_data', 64)
    state.memory.store(0x1000, input_data)
    # 执行符号执行,指定目标分支
    pg = proj.factory.path_group(state)
    pg.explore(find=0x1234, avoid=0x5678)
    # 获取符号执行路径
    path = pg.found[0]
    print(path.state.solver.eval(input_data)) # 打印输入数据
    print(path.state.solver.constraints) # 打印路径约束
    

    需要注意的是,由于 angr 对 SPARC 的支持性较差,上述代码仅作为示例参考,具体实现可能会遇到各种问题。 针对问题:“如果 angr 真的不可行,有其他的工具可用吗?”,回答如下: 除了上述提到的符号执行工具外,还有一些其他的支持 SPARC 的二进制分析工具和虚拟化工具,例如 GDB、QEMU 和 Simics 等。这些工具可以通过动态分析、污点分析、模拟执行等技术来进行程序分析和漏洞挖掘。 其中,QEMU 是一个开源的虚拟化工具,可以模拟多种 CPU 架构,包括 SPARC。可以使用 QEMU 命令行界面或 python API 来对 SPARC 程序进行动态分析和符号执行。QEMU 还支持 GDB 协议,可以在 GDB 中连接到 QEMU 进行调试和分析。以下是一个使用 QEMU 和 Keystone 对 SPARC 程序进行符号执行的示例代码:

    from unicorn import *
    from unicorn.sparc_const import *
    from keystone import *
    def qemu_sparc(symbolic_data):
        # 准备输入数据
        CODE = b'\x01\x00\x20\x40\x81\xc3\xe0\x08' # trap
        DATA = bytes(symbolic_data)
        # 初始化 Unicorn 引擎
        mu = Uc(UC_ARCH_SPARC, UC_MODE_BIG_ENDIAN)
        mu.mem_map(0x1000, 0x1000)
        mu.mem_write(0x1000, CODE)
        mu.mem_map(0x2000, 0x1000)
        mu.mem_write(0x2000, DATA)
        # 初始化 Keystone 引擎
        ks = Ks(KS_ARCH_SPARC, KS_MODE_BIG_ENDIAN)
        # 获取输入数据地址
        reg_name = 'g5'
        reg_value = 0x2000
        # 注入符号变量
        for i in range(8):
            reg_name = 'o%d' % i
            mu.reg_write(eval('UC_SPARC_REG_' + reg_name.upper()), reg_value + i * 8)
        # 模拟执行
        mu.hook_add(UC_HOOK_MEM_READ | UC_HOOK_MEM_WRITE, hook_mem_access)
        mu.hook_add(UC_HOOK_CODE, hook_code)
        mu.emu_start(0x1000, 0x1008)
    # 执行符号执行
    qemu_sparc('a' * 64)
    

    需要注意的是,QEMU 对 SPARC 的支持在某些情况下可能不完整或不稳定,不能保证符号执行的正确性和有效性。因此,在选择工具和方法时,需要根据具体情况综合考虑。

    展开全部

    评论
  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-05 07:49
    关注

    引自免费微信小程序:皆我百晓生

    在符号执行领域,尽管Angr是一个非常强大的二进制分析框架,它最初设计时主要针对x86和ARM架构。对于SPARC架构的支持确实不如前两者成熟。但是,这并不意味着没有其他选项。

    一种可能的替代方案是采用QEMU,它可以作为一个动态二进制翻译器(Dynamic Binary Translator, DBT),同时也可以作为模拟器运行在不同的CPU架构上,包括SPARC。结合一个符号执行引擎,例如KLEE或SeaHorn,可以实现对SPARC架构的符号执行。

    以下是使用QEMU和KLEE的一个简化的步骤概述:

    1. 安装依赖:

      • QEMU: sudo apt-get install qemu
      • KLEE: 可以从源码编译,参考官方文档:https://klee.github.io/installation.html
    2. 准备SPARC可执行文件: 首先,你需要一个SPARC架构的C语言编译好的可执行文件。你可以使用GCC的sparc目标架构进行编译:

      gcc -mcpu=v9 -mtune=v9 -m64 -Os -o my_program_sparc my_program.c
      
    3. 使用QEMU启动KLEE: 使用QEMU来加载并执行你的SPARC可执行文件,并通过KLEE进行符号执行。注意,这个过程可能比较复杂,因为KLEE不直接支持SPARC,但可以通过QEMU间接支持。你需要创建一个KLEE插件来处理SPARC指令集。这是一个简化版的例子:

      #!/usr/bin/env python
      import klee
      
      class SparcPlugin(klee.KleePlugin):
          def __init__(self):
              super(SparcPlugin, self).__init__("sparc")
      
          def run(self, cmd_args, stdin=None, stdout=None, stderr=None):
              return "qemu-system-sparc64 -L . %s" % cmd_args[0]
      
      if __name__ == "__main__":
          plugin = SparcPlugin()
          plugin.run(["./my_program_sparc"])
      

      将上述Python脚本保存为sparc_plugin.py,然后运行KLEE:

      klee --driver=./sparc_plugin.py --no-output my_program_sparc
      

    请注意,这只是一个基本的概念验证示例,实际操作可能会遇到很多挑战,比如需要正确地处理SPARC指令集的细节、内存映射以及寄存器等。你可能还需要根据实际情况调整QEMU的配置,以便更好地支持SPARC架构的二进制文件。

    此外,还有其他符号执行工具,如Valgrind,但它主要用于内存错误检测,而不是专门用于符号执行。如果你能找到专门为SPARC架构设计的符号执行工具,那将更理想,但目前似乎并没有广泛使用的工具。你可能需要自己定制或修改现有工具以适应SPARC架构的需求。

    展开全部

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部