Crates.io | udbserver |
lib.rs | udbserver |
version | 0.1.0 |
source | src |
created_at | 2022-04-22 13:32:25.833152 |
updated_at | 2022-04-22 13:32:25.833152 |
description | Provide Unicorn emulator with a debug server |
homepage | |
repository | http://github.com/bet4it/udbserver |
max_upload_size | |
id | 572161 |
size | 56,262 |
When you do emulation with Unicorn Engine, do you want to inspect the inner state during every step?
udbserver
is a plugin for Unicorn, provides a debug server which implements GDB Remote Serial Protocol. You can connect it by a GDB
client and do debugging as what you do on real program.
udbserver
can be used as a crate by Rust program, but it also provides a C library and bindings for other languages. You can use it inside most Unicorn based projects!
udbserver
only provides one API:
void udbserver(void* handle, uint16_t port, uint64_t start_addr);
The handle
should be the raw handle of a Unicorn instance, port
is the port to be listened, start_addr
is the address which when Unicorn runs at the debug server will start and wait to be connected. if start_addr
is provided with 0
, the debug server will start instantly.
You can call this API inside a Unicorn hook, so you can integrate udbserver
inside other Unicorn based project easily.
You can use udbserver
as a crate in Rust
.
You can check the example on how to use it.
And you can try it by:
$ cargo run --example server
Then you can connect it with a GDB
client.
udbserver
provides a C-compatible set of library, header and pkg-config files, which help you to use it with other languages.
To build and install it you need to use cargo-c:
$ cargo install cargo-c
$ mkdir build
$ cargo cinstall --release --prefix=/usr --destdir build
$ sudo cp -a build/* /
After install the udbserver
library, you can use udbserver
in other languages.
You could check the examples on how to use udbserver
by different languages: