#debugging #emulator #gdb

udbserver

提供与 Unicorn 模拟器配合的调试服务器

1 个不稳定版本

0.1.0 2022年4月22日

#175模拟器

MITGPL-2.0 许可协议

48KB
1K SLoC

Rust 1K SLoC C 55 SLoC Go 42 SLoC // 0.1% comments Python 34 SLoC // 0.1% comments Java 26 SLoC

udbserver - Unicorn 模拟器调试服务器

当您使用 Unicorn Engine 进行模拟时,您是否希望在每一步都检查内部状态?

udbserver 是一个用于 Unicorn 的插件,它提供了一个实现 GDB 远程串行协议 的调试服务器。您可以通过一个 GDB 客户端连接它,并像在真实程序中一样进行调试。

udbserver 可以作为 Rust 程序的包使用,但它还提供了 C 库和其他语言的绑定。您可以在大多数基于 Unicorn 的项目中使用它!

特性

  • 寄存器
  • 内存
  • 单步执行
  • 断点
  • 观察点
  • Ctrl-C 中断

支持的架构

  • i386
  • x86_64
  • ARM
  • AArch64
  • MIPS
  • PowerPC

用法

API

udbserver 只提供了一个 API

void udbserver(void* handle, uint16_t port, uint64_t start_addr);

handle 应该是 Unicorn 实例的原始句柄,port 是要监听的端口,start_addr 是当 Unicorn 在调试服务器上运行时将启动并等待连接的地址。如果提供了 0 作为 start_addr,调试服务器将立即启动。

您可以在 Unicorn 钩子内部调用此 API,这样您就可以轻松地将 udbserver 集成到其他基于 Unicorn 的项目中。

在 Rust 中使用

您可以将 udbserver 作为 Rust 中的包使用。

您可以通过查看 示例 了解如何使用它。

尝试以下操作

$ cargo run --example server

然后您可以使用 GDB 客户端连接到它。

安装

udbserver 提供了一套兼容 C 的库、头文件和 pkg-config 文件,这有助于您在其他语言中使用它。

要构建和安装它,您需要使用 cargo-c

$ cargo install cargo-c
$ mkdir build
$ cargo cinstall --release --prefix=/usr --destdir build
$ sudo cp -a build/* /

语言绑定

安装 udbserver 库后,您可以在其他语言中使用 udbserver

您可以查看如何使用不同语言使用 udbserver 的示例。

依赖项

约14MB
约316K SLoC