Releases: encounter/objdiff
v2.0.0-alpha.2
What's Changed
- Previous release notes (v2.0.0-alpha.1)
- Added: Auto-detect MIPS ABI / instruction category (9e57a66)
- Added: Arch settings menu (9e57a66)
- Fixed: Default "Space between args" to true (f30b3cf)
Full Changelog: v2.0.0-alpha.1...v2.0.0-alpha.2
v2.0.0-alpha.1
What's Changed
- Added: objdiff has an alpha CLI version!
objdiff-cli diff
: A modern TUI diff tool. Run withobjdiff-cli diff -1 target.o -2 base.o [symbol_name]
orobjdif-cli diff -p [project_dir] [symbol_name]
(if project has anobjdiff.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 withobjdiff-cli report generate -p [project_dir] -o report.json
(requiresobjdiff.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 inobjdiff.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)]
toReportFunction::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
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 towgpu
(D3D12, Metal, Vulkan, OpenGL/ES) overglow
(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
- Fixed: Minor fix for click-to-highlight (#32)
Full Changelog: v0.6.0...v0.6.1
v0.6.0
- 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
- Adjust "Diffable" to exclude missing target objects
Full Changelog: v0.5.1...v0.5.2
v0.5.1
- 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
- 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
- Add "Recent Projects" to file menu
Full Changelog: v0.4.3...v0.4.4
v0.4.3
- 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 inobjdiff.json
.
Full Changelog: v0.4.1...v0.4.3