Skip to content

Releases: encounter/objdiff

v2.0.0-alpha.2

22 May 00:22
Compare
Choose a tag to compare

What's Changed

Full Changelog: v2.0.0-alpha.1...v2.0.0-alpha.2

v2.0.0-alpha.1

21 May 18:59
Compare
Choose a tag to compare

What's Changed

  • Added: objdiff has an alpha CLI version!
    • objdiff-cli diff: A modern TUI diff tool. Run with objdiff-cli diff -1 target.o -2 base.o [symbol_name] or objdif-cli diff -p [project_dir] [symbol_name] (if project has an objdiff.json)
      • Note: Auto-build has not been implemented yet! Build manually, then use R to reload the object.
    • objdiff-cli report: Generate project matching reports with objdiff-cli report generate -p [project_dir] -o report.json (requires objdiff.json). This report includes a detailed view of every symbol in the project and statistics on matched code and data.
  • Added: Alpha support for x86 in COFF objects (.obj). Please report any bugs!
  • Added: objdiff now loads metadata from a .note.split section. This section can include the original virtual address of each symbol, which objdiff displays in a tooltip when hovering over the symbol. Generated by decomp-toolkit version v0.8.1 and above.
  • Added: custom_args option in objdiff.json. (#59)
  • Added: More instruction context menu options: "Copy instruction", "Copy instruction bytes"
  • Added: Calculate & display overall section match percentages.
  • Fixed: Strip WSL distro root from \\wsl.localhost\ paths. (#59)
  • Fixed: Proper handling of multiple .text sections when parsing DWARF line info. (#63)
  • Fixed: decomp.me integration now works if the configuration is present. (v1.0.0 bug)
  • Changed: Removed all diff algorithms other than "patience".
  • Changed: Rewrote ppc750cl disassembler (10x faster disassembly)

Contributions

  • Handle ^F, ^B, ^U and ^D readline shortcuts in pager by @r-burns in #42
  • Add #[serde(default)] to ReportFunction::address by @ribbanya in #43
  • cli diff: Resolve object and project if not specified by @ribbanya in #44
  • cli report: Generate virtual addresses as uppercase by @ribbanya in #45
  • cli: Log to stderr instead of stdout by @ribbanya in #46
  • objdiff-cli diff: Accept any kind of unit path by @ribbanya in #48
  • objdiff-cli diff: Support "Relax relocation diffs" by @ribbanya in #50
  • objdiff-cli diff: Reduce duplicate key event code by @ribbanya in #51
  • Fix release CI (and add sccache) by @ribbanya in #52
  • Add custom make args by @AetiasHax in #59
  • Strip distro root prefix by @AetiasHax in #58
  • Fix size of .note.split section by @cadmic in #61
  • Use base arch when processing base code by @AetiasHax in #62
  • Display correct line numbers for multiple .text sections by @AetiasHax in #63
  • objdiff-cli report: Support data sections by @ribbanya in #49

Full Changelog: v1.0.0...v2.0.0-alpha.1

v1.0.0

22 Jan 07:43
Compare
Choose a tag to compare

objdiff has reached v1.0! 🎉

  • Added: Export function to decomp.me scratch (beta)
    • Documentation coming soon!
  • Added: Extended font configuration: load any system font
  • Added: DWARF 2+ line info support (#37)
  • Added: Option to relax relocation diffs: ignores differences in relocation targets. (Address, name, etc) (#34)
  • Fixed: Highlight: Consider uimm/simm/offset all equivalent (#33)
  • Changed: Re-enable wgpu. This goes back to wgpu (D3D12, Metal, Vulkan, OpenGL/ES) over glow (OpenGL ES).
  • Changed: Re-enable wsl. This restores the WSL2 configuration option, moved into project settings.

Full Changelog: v0.6.1...v1.0.0

v0.6.1

22 Nov 05:18
Compare
Choose a tag to compare
  • Fixed: Minor fix for click-to-highlight (#32)

Full Changelog: v0.6.0...v0.6.1

v0.6.0

21 Nov 19:56
Compare
Choose a tag to compare
  • Added: A new default diff algorithm, and the ability to switch between algorithms. (See below)
  • Added: An "Incomplete" filter to the object list. Allows filtering out objects marked as "complete".
  • Fixed: Excessive repaints (especially on Windows). The app should use significantly less resources and be more responsive to file changes.
  • Fixed: Loading the last file on start when "Rebuild on changes" is disabled.
  • Removed: "Run in WSL" option for the build system. This was janky and overall not recommended as opposed to running natively. If you used this feature, please let me know.
  • Changed: Release builds of objdiff now use the glow (OpenGL) backend instead of wgpu. wgpu being enabled on release builds was unintentional, and adds unnecessary complexity/overhead.
    • Primarily, this means that OpenGL is used instead of Vulkan on Linux, Metal on macOS, and D3D12 on Windows.
    • If this causes issues or degrades performance for you, please create an issue.

Diff algorithms

New diff algorithms have been introduced, and a new default is now used for code and data:

  • Patience (new default)
  • Levenshtein (old default)
  • Myers
  • LCS (WARNING: slow & broken)

Compared to Levenshtein's space complexity of O(NM), Patience has a space complexity of O(N+M), meaning that much larger comparisons are possible (and faster, to boot). Previously, translation units with large data sections could easily eat up gigabytes of RAM or straight up crash with Levenshtein.

Change the active diff algorithm in "Diff Options" -> "Algorithm...".
Please try both Patience and Levenshtein and provide feedback on the change.

Full Changelog: v0.5.2...v0.6.0

v0.5.2

09 Oct 17:00
Compare
Choose a tag to compare
  • Adjust "Diffable" to exclude missing target objects

Full Changelog: v0.5.1...v0.5.2

v0.5.1

07 Oct 19:06
Compare
Choose a tag to compare
  • Restore context menu on highlightable fields (fixes #30).
  • Hide hidden symbols by default.
  • Add "Diff Options" to menu bar.
  • Reload objects when changed externally.
  • Allows disabling build_base as well for projects using an external build system.

Full Changelog: v0.5.0...v0.5.1

v0.5.0

06 Oct 04:14
Compare
Choose a tag to compare
  • Adds click-to-highlight: Highlights registers, instructions, arguments, symbols or addresses.
  • Adds "Original" instruction to hover tooltip, showing the non-simplified form of the instruction.
  • Updates all dependencies.
    • Resolves slowness when closing the application.

Full Changelog: v0.4.4...v0.5.0

v0.4.4

05 Oct 04:20
Compare
Choose a tag to compare
  • Add "Recent Projects" to file menu

Full Changelog: v0.4.3...v0.4.4

v0.4.3

10 Sep 04:36
Compare
Choose a tag to compare
  • Support completed field for objects in project config. In object tree, displays red for incomplete, green for complete.
  • Add support for one-sided diffs. A project can include objects without an associated source file for viewing.
  • Add versioning to the app's configuration, supporting upgrades without losing user configuration.
  • Support min_version field in objdiff.json.

Full Changelog: v0.4.1...v0.4.3