v0.1.0
ixdiff compares the assembly of two binaries to show how the generated
code differs: which functions changed, by how much, and what the
instruction-level differences are.
First release.
Highlights
- Summary report: function counts, text size delta, opcode histogram,
per-package rollup, and top-N tables (--top,--sort,--filter). - Per-function assembly diffs (
--fn, repeatable, substring matching
with suggestions), unified or two-column (--side-by-side), with
hunks, address columns, and changed-operand emphasis on terminals. - Relocation-aware: functions whose bytes differ only because code or
data moved are counted separately and excluded from statistics; on
amd64 and arm64 most are classified without disassembly, so large
binaries compare in well under a second per 100MB. - Normalization keeps diffs meaningful: call targets symbolized,
branch labels alignment-derived, address-valued operands masked,
renamed functions re-paired. Real immediates, registers, and stack
offsets still diff (--mask-spto ignore frame-size shifts). --blocksmatches basic blocks first, tolerating block reordering
(e.g. PGO builds).--jsonfor machine-readable reports.
Pure Go (debug/elf, debug/macho, debug/pe, golang.org/x/arch),
no objdump needed. ELF, Mach-O, and PE on amd64 and arm64; Go binaries
get exact function ranges from the pclntab even when stripped.
Install
go install github.com/loov/ixdiff@v0.1.0or use the attached prebuilt binaries for linux, macOS, and Windows.