encounter / objdiff

A local diffing tool for decompilation projects
Apache License 2.0
77 stars 13 forks source link

Display correct line numbers for multiple .text sections #63

Closed AetiasHax closed 1 month ago

AetiasHax commented 1 month ago

Object files with multiple .text sections currently display incorrect line numbers. This is because we are storing line info by mapping an address to a line number, not taking section index into consideration.

DWARF 2.0+ supports multiple .text sections by defining multiple "sequences", where each sequence starts from address 0 and correlates to one .text section. I've implemented support for this, by iterating to the next code section whenever a sequence ends. This means the line info is now mapping section index, to address, to line number.

From what I've read, DWARF does not define how it correlates a sequence to a section. I've made an assumption and believe that the first sequence should correlate to the first code section, and so on.

I haven't tested this on all the architectures that objdiff supports, but I'd be happy to do so if anyone can provide some object files.

encounter commented 1 month ago

Thanks for this! I committed a few changes that cleans things up and fixes the issue for DWARF 1 as well. This code is a little tricky when dealing with objects that are either 1. missing a .text section but still have a .line section or 2. have empty .text section(s). So my changes are aimed at making sure the logic is solid in those cases. Could you retest with your DWARF 2 objects?

encounter commented 1 month ago

I'm gonna go ahead and merge this for a 2.0.0 alpha release.