diff --git a/CHANGELOG.md b/CHANGELOG.md index f828097..61ad28e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [0.4.0] - 2024-03-24 + ### Added - Allow opening a PDB file and diffing two PDB files using drag and drop (@learn-more) @@ -11,6 +13,9 @@ - Implement basic module reconstruction and diffing capabilities - Add 3 new commands to `resymc`: `list-modules`, `dump-module`, `diff-module` - Add support for small MSF file format (e.g., VC++ 6 PDBs) in the `pdb` crate fork (@jon-zu) +- Add "Find Xrefs to" button to find types that use the current type +- Add a keyboard shortcut to look for cross-references to a type (Alt+X) +- Reconstructed output for C types can now be compiled without modifications ### Changed @@ -19,6 +24,9 @@ ### Fixed - Fix wrong size detection for unnamed unions in structs, leading to infinite loops in certain cases +- Fix reconstruction of function pointer arrays +- Fix reconstruction of function pointer's arguments +- Fix reconstruction of certain class/struct constructors ## [0.3.0] - 2023-02-19 diff --git a/Cargo.lock b/Cargo.lock index 9e91993..63bdd83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2976,7 +2976,7 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "resym" -version = "0.3.0" +version = "0.4.0" dependencies = [ "ahash", "anyhow", @@ -2996,7 +2996,7 @@ dependencies = [ [[package]] name = "resym_core" -version = "0.3.0" +version = "0.4.0" dependencies = [ "crossbeam-channel", "dashmap", @@ -3016,7 +3016,7 @@ dependencies = [ [[package]] name = "resymc" -version = "0.3.0" +version = "0.4.0" dependencies = [ "anyhow", "crossbeam-channel", diff --git a/Cargo.toml b/Cargo.toml index 8f579c8..7ad3f02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ lto = true [workspace.package] -version = "0.3.0" +version = "0.4.0" [workspace] resolver = "2" diff --git a/README.md b/README.md index f45fd5c..e20d19c 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,11 @@ Inspired by [PDBRipper](https://github.com/horsicq/PDBRipper) and - Cross-platform (native and web) - GUI and CLI versions available +- Decent performance, even on huge PDB files - C and C++ types reconstruction - C and C++ types diff generation (between two PDBs) -- Decent performance, even on huge PDB files +- Compilable output for reconstructed C types +- PDB module browsing ## Screenshot @@ -24,7 +26,7 @@ Inspired by [PDBRipper](https://github.com/horsicq/PDBRipper) and If you have Rust installed, you can easily install resym with `cargo`: ``` -cargo install --git https://github.com/ergrelet/resym --tag v0.3.0 +cargo install --git https://github.com/ergrelet/resym --tag v0.4.0 ``` After that, you can invoke `resym` and `resymc` from anywhere, through the @@ -39,7 +41,7 @@ If you want to use the GUI version, simply run the `resym` executable. A CLI version (named `resymc`) is also available: ``` -resymc 0.3.0 +resymc 0.4.0 resymc is a utility that allows browsing and extracting types from PDB files. USAGE: @@ -50,11 +52,14 @@ FLAGS: -V, --version Prints version information SUBCOMMANDS: - diff Compute diff for a type between two given PDB files - dump Dump type from a given PDB file - dump-all Dump all types from a given PDB file - help Prints this message or the help of the given subcommand(s) - list List types from a given PDB file + diff Compute diff for a type between two given PDB files + diff-module Compute diff for a module between two given PDB files + dump Dump type from a given PDB file + dump-all Dump all types from a given PDB file + dump-module Dump module from a given PDB file + help Prints this message or the help of the given subcommand(s) + list List types from a given PDB file + list-modules List modules from a given PDB file ``` @@ -71,9 +76,13 @@ cargo build --release ## Know limitations The GUI version might struggle to display huge outputs (>20 MB). Disabling -syntax highlighting (or dependency reconstruction altogether) will help, but -generally the CLI version is more suited when dumping types with a huge amount -of dependencies. +syntax highlighting (and/or dependency reconstruction altogether) will help but, +generally speaking, the CLI version is more suited when dumping types with a huge +amount of dependencies. + +C++ namespaces aren't reconstructed at the moment, which means that +the reconstructed output for C++ types isn't necessarily compilable, because of +that. The web version cannot handle PDB files larger than ~2.1 GB due to how files are accessed and the 32-bit limitations of `wasm32` targets. This might change diff --git a/docs/static/resym_screenshot.png b/docs/static/resym_screenshot.png index 2e1ad88..5b8677a 100644 Binary files a/docs/static/resym_screenshot.png and b/docs/static/resym_screenshot.png differ diff --git a/resym/Cargo.toml b/resym/Cargo.toml index 31a6007..32d9758 100644 --- a/resym/Cargo.toml +++ b/resym/Cargo.toml @@ -24,7 +24,7 @@ rayon = ["resym_core/rayon"] http = ["resym_core/http"] [dependencies] -resym_core = { version = "0.3", path = "../resym_core", default-features = false } +resym_core = { version = "0.4", path = "../resym_core", default-features = false } eframe = { version = "0.26", features = ["persistence"] } serde = "1.0" diff --git a/resym_core/tests/snapshots/module_diffing__module_diffing_by_path.snap b/resym_core/tests/snapshots/module_diffing__module_diffing_by_path.snap index 3ec4342..d533dbb 100644 --- a/resym_core/tests/snapshots/module_diffing__module_diffing_by_path.snap +++ b/resym_core/tests/snapshots/module_diffing__module_diffing_by_path.snap @@ -11,7 +11,7 @@ expression: module_diff.data // New PDB file: tests/data/test_diff_to.pdb // Image architecture: Amd64 // - // Information extracted with resym v0.3.0 + // Information extracted with resym v0.4.0 // using namespace std; diff --git a/resymc/Cargo.toml b/resymc/Cargo.toml index bff354d..7566a51 100644 --- a/resymc/Cargo.toml +++ b/resymc/Cargo.toml @@ -10,7 +10,7 @@ default = ["rayon"] rayon = ["resym_core/rayon"] [dependencies] -resym_core = { version = "0.3", path = "../resym_core", default-features = false } +resym_core = { version = "0.4", path = "../resym_core", default-features = false } structopt = { version = "0.3", default-features = false } syntect = "5.2"