Cannoli 开源项目使用教程

Cannoli 开源项目使用教程

cannoli High-performance QEMU memory and instruction tracing cannoli 项目地址: https://gitcode.com/gh_mirrors/can/cannoli

项目介绍

Cannoli 是一个高性能的 QEMU 内存与指令追踪引擎,专为提高对-qemu-user 的追踪效率设计。它能够记录执行中的程序计数器(PC)和内存操作的踪迹。项目通过向 QEMU 应用小规模补丁来直接在即时编译(JIT)过程中注入代码,同时包含一个共享库,用于决定如何及何时进行仪器化处理,并有一个消费这些由 QEMU 输出流的库,以便在另一进程中进行复杂的跟踪数据分析。Cannoli 设计时考虑了最小干扰原则,确保QEMU的运行几乎不受影响,即便是处理数十亿条目标指令、多线程的qemu-user应用程序,也支持多线程并行处理跟踪数据。

项目快速启动

环境准备

首先,确保你的开发环境已安装Git、Cargo(Rust的包管理和构建工具)以及相应的编译工具链。

  1. 克隆Cannoli项目仓库:

    git clone https://github.com/MarginResearch/cannoli.git
    
  2. 进入项目目录 并进行构建:

    cd cannoli
    cargo build --release
    
  3. 获取并准备QEMU源码:

    git clone https://gitlab.com/qemu-project/qemu.git
    cd qemu
    git checkout 78385bc738108a9b5b20e639520dc60425ca2a5a
    patch -p1 < ../qemu_patches/patch
    ./configure --target-list=mipsel-linux-user,riscv64-linux-user --extra-ldflags="-ldl" --with-cannoli=<你的cannoli项目路径>
    make -j4
    
  4. 运行示例:

    • 在一个终端启动符号化服务:
      cd examples/symbolizer
      cargo run --release
      
    • 另一个终端中,使用Cannoli运行程序:
      cd examples/symbolizer
      <你的qemu路径>/build/qemu-mipsel -cannoli <你的cannoli路径>/target/release/<你的jitter.so> /example_app
      

应用案例和最佳实践

Cannoli可以用于性能分析、调试、覆盖率测试等场景。以下以简单的覆盖率收集为例:

  1. 构建并运行覆盖率示例:

    cd examples/coverage
    cargo run --release
    
  2. 运行你的二进制并收集覆盖率信息:

    export QEMU_CANNOLI=cannoli/target/release/libcoverage.so
    <你的qemu路径>/build/qemu-x86_64 /usr/bin/vlc
    

典型生态项目

Cannoli因其特性,在虚拟化技术、安全审计、性能分析等领域找到广泛应用。尽管本说明未直接提及特定的“典型生态项目”,但结合其功能,可以想象到,任何依赖于深度系统监控或需模拟环境中精准控制执行路径的应用都能从Cannoli中获益,如安全研究者的动态分析工具,或开发者对于复杂软件的行为分析工具。


以上步骤提供了快速了解和启动Cannoli的基本指南,深入应用则需要根据具体需求实现相应的钩子函数和数据解析逻辑。

cannoli High-performance QEMU memory and instruction tracing cannoli 项目地址: https://gitcode.com/gh_mirrors/can/cannoli

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石淞畅Oprah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值