Implementing a reproducible diff interface
ldemailly opened this issue · 3 comments
ldemailly commented
Any thoughts on how to do a diff between to binaries
Basically I want to compare improvements (or degradation) over time for a binary
(or differences between 2)
ideally it'd tell me
- new sections
- removed sections
- % change in same sections
Zxilly commented
We now have the output in json format, maybe we can write a differ for the different json files.
But different json files are supposed to be generated in the same analysis mode, and if one gets the exact information from the dwarf while the other can only rely on disassembly and guessing, obviously the false positive rate will be frighteningly high.
Zxilly commented
You will now be able to get something like the following.
┌────────────────────────────────────────────────────────────────┐
│ Diff between bin-linux-1.21-amd64 and bin-linux-1.22-amd64 │
├─────────┬──────────────────────┬──────────┬──────────┬─────────┤
│ PERCENT │ NAME │ OLD SIZE │ NEW SIZE │ DIFF │
├─────────┼──────────────────────┼──────────┼──────────┼─────────┤
│ +29.34% │ runtime │ 782 kB │ 1.0 MB │ +229 kB │
│ add │ internal/chacha8rand │ │ 3.1 kB │ +3.1 kB │
│ +5.70% │ <autogenerated> │ 18 kB │ 19 kB │ +1.0 kB │
│ +8.70% │ internal/abi │ 6.0 kB │ 6.6 kB │ +525 B │
│ +10.88% │ internal/cpu │ 4.7 kB │ 5.2 kB │ +515 B │
│ +4.45% │ internal/reflectlite │ 3.9 kB │ 4.1 kB │ +173 B │
│ +2.64% │ internal/bytealg │ 1.5 kB │ 1.5 kB │ +39 B │
│ +0.81% │ strconv │ 4.0 kB │ 4.0 kB │ +32 B │
│ +0.19% │ syscall │ 13 kB │ 13 kB │ +24 B │
│ -0.17% │ main │ 19 kB │ 19 kB │ -32 B │
│ -0.37% │ embed │ 8.6 kB │ 8.6 kB │ -32 B │
│ -0.38% │ reflect │ 25 kB │ 25 kB │ -96 B │
│ -0.26% │ time │ 87 kB │ 86 kB │ -224 B │
│ -8.09% │ sync │ 9.3 kB │ 8.6 kB │ -755 B │
├─────────┼──────────────────────┼──────────┼──────────┼─────────┤
│ +7.59% │ .rodata │ 143 kB │ 153 kB │ +11 kB │
│ +5.04% │ .gopclntab │ 144 kB │ 152 kB │ +7.3 kB │
│ +3.61% │ .debug_info │ 168 kB │ 174 kB │ +6.1 kB │
│ +3.52% │ .debug_loc │ 81 kB │ 84 kB │ +2.9 kB │
│ +3.03% │ .debug_line │ 80 kB │ 82 kB │ +2.4 kB │
│ +3.44% │ .symtab │ 59 kB │ 61 kB │ +2.0 kB │
│ +4.29% │ .debug_frame │ 29 kB │ 30 kB │ +1.2 kB │
│ +1.28% │ .strtab │ 61 kB │ 62 kB │ +779 B │
│ +3.28% │ .debug_ranges │ 13 kB │ 13 kB │ +415 B │
│ +5.13% │ .data │ 5.0 kB │ 5.2 kB │ +256 B │
│ +7.32% │ .typelink │ 1.3 kB │ 1.3 kB │ +92 B │
│ +27.78% │ .go.buildinfo │ 288 B │ 368 B │ +80 B │
│ -1.56% │ .debug_gdb_scripts │ 64 B │ 63 B │ -1 B │
│ -0.63% │ .noptrdata │ 2.5 kB │ 2.5 kB │ -16 B │
│ -12.17% │ .shstrtab │ 263 B │ 231 B │ -32 B │
├─────────┼──────────────────────┼──────────┼──────────┼─────────┤
│ +3.86% │ bin-linux-1.21-amd64 │ 1.6 MB │ 1.6 MB │ +61 kB │
│ │ bin-linux-1.22-amd64 │ │ │ │
└─────────┴──────────────────────┴──────────┴──────────┴─────────┘
ldemailly commented
That’s awesome, thanks!!