43 个重大版本

0.46.2 2024 年 1 月 31 日
0.46.1 2023 年 7 月 12 日
0.46.0 2023 年 1 月 3 日
0.45.0 2022 年 12 月 13 日
0.3.0 2020 年 12 月 18 日

#658 in Rust 模式

Download history 75/week @ 2024-03-11 47/week @ 2024-03-18 4/week @ 2024-03-25 124/week @ 2024-04-01 8/week @ 2024-04-08 8/week @ 2024-04-15 10/week @ 2024-04-22 5/week @ 2024-05-06 98/week @ 2024-05-20 87/week @ 2024-06-03 48/week @ 2024-06-10 32/week @ 2024-06-17 48/week @ 2024-06-24

每月 215 次下载

GPL-2.0 许可证

465KB
9K SLoC

panda-rs 是 PANDA 的 Rust 绑定集合。

以下提供

  • 以属性宏形式提供的对各种 PANDA 事件的回调
  • 当发生客机系统调用时的回调
  • 对各种核心 PANDA 插件(hooks2、osi 等)的绑定
  • 对核心 PANDA API 的安全绑定
  • 通过 libpanda 驱动 PANDA 的 API
  • 通过 panda_sys 访问原始 PANDA 和 QEMU API 绑定

功能标志

  • libpanda - 启用 libpanda 模式。这允许编译为与 libpanda 链接的二进制文件,用于 pypanda 风格的使用。

特定于架构的功能

PANDA 支持多种架构,但需要为每个架构编译插件。为了针对特定的客机架构,请使用以下选项之一:x86_64i386armaarch64mipsmipselmips64ppc

通常 PANDA 插件在其 Cargo.toml 中转发这些功能中的每一个

[features]
x86_64 = ["panda/x86_64"]
i386 = ["panda/i386"]
# ...

回调

panda-rs 广泛使用回调来处理各种事件的分析。要使用回调,只需将回调的属性应用于应调用回调的任何函数。为了在 PANDA 插件(不同于使用 libpanda 的应用程序)中使用回调,必须标记一个函数为 #[panda::init],否则插件在 PANDA 中将无法工作。

回调有两种形式:上述提到的自由形式函数(使用属性宏)和闭包回调,后者使用 Callback API。

libpanda 模式

PANDA 还提供了一个动态库(libpanda)。panda-rs 允许链接到 libpanda 而不是作为 PANDA 插件进行链接。这创建了一个需要 libpanda 才能运行的可执行文件。要编译为 libpanda 模式,请确保环境变量 PANDA_PATH 设置为您的 PANDA build 文件夹。

重要 流行的回调 流行的插件
初始化 在块执行之前 osi
Panda 读取后的虚拟内存 Linux 进程启动
[mod@hook] 写入后的虚拟内存 钩子2
系统上 ASID 改变 客人插件管理器
未初始化 在块执行之前使无效优化
寄存器 指令翻译
PandaArgs 指令执行

依赖关系

~14MB
~390K SLoC