Expand description
§dbg-rs 🦀
Safe Rust bindings for the COM interfaces of the Windows debugging engine.
§Table of Contents
§Features
- ✅ Safe Rust bindings for Windows debugging interfaces.
- ✅ Easy-to-use macros for logging to the debugger.
- ✅ Abstractions for managing symbols, memory, and CPU registers.
- ✅ Works seamlessly with the Windows COM-based debugging system.
§Installation
Add dbg
to your project by updating your Cargo.toml
:
cargo add dbg-rs
Or manually add the dependency:
[dependencies]
dbg-rs = "<version>"
§Usage
The dbg-rs
library provides utilities to interact with the Windows debugging engine, such as executing commands, logging messages, and inspecting debug symbols. Below are some common use cases:
§Logging to the Debugger
Use the dprintln!
macro to send formatted messages to the debugger output:
use dbg_rs::dprintln;
// Example usage
dprintln!(dbg, "Hello, {}!", "Debugger");
dprintln!(dbg, "Number: {}", 42);
§Executing Commands
Running commands in the debugger:
use dbg_rs::Dbg;
dbg.exec(".echo Hello, Debugger!")?;
§Reading Virtual Memory
Access specific regions of the debugged process’s memory:
use dbg_rs::Dbg;
let mut buffer = vec![0u8; 128];
dbg.read_vaddr(0x7FFEBEEF0000, &mut buffer)?;
println!("Read memory: {:?}", &buffer[..16]); // Print first 16 bytes
For more examples, including a WinDbg extension that lists loaded modules, see the examples
folder in this repository. 📂
§Contributing to dbg-rs
To contribute to dbg-rs, follow these steps:
- Fork this repository.
- Create a branch:
git checkout -b <branch_name>
. - Make your changes and commit them:
git commit -m '<commit_message>'
. - Push your changes to your branch:
git push origin <branch_name>
. - Create a pull request.
Alternatively, consult the GitHub documentation on how to create a pull request.
§License
This project is licensed under the MIT License. See the LICENSE file for details.
Modules§
- error
- The
error
module defines error types used throughout the library.
Macros§
- dprint
- Macro to send formatted messages to the debugger using
Dbg::print
- dprintln
- Macro to send formatted messages to the debugger using
Dbg::println
.
Structs§
- Dbg
- Represents a debugging interface that allows execution of commands, querying and managing debug symbols, inspecting memory, and interacting with registers.
Enums§
- Module
- Represents either a module address or a module name.
Traits§
- Debug
Value - A trait to extract a value from a [
DEBUG_VALUE
].