BigEd wrote:
If a disassembler can pass the round trip test, then its output is useful for making changes to the code.
That is only true when the edits do not change the size of anything.
Literal absolute addresses, alignment requirements, vector tables, graphics data at magic locations, etc, all get skewed otherwise. If you want to add entries to data tables, the code is usually littered with immediate values having baked-in prior lengths of those tables. The more the disassembler can "understand" what the code is doing, and the constraints it assumes in order to work, the more robustly it can generate editable output.
Generally, such reverse engineering involves taking a raw disassembly, and hunting down all the relative constraints between all these magic numbers and magic locations, deciding which should be labels, which addresses should be fixed & where padding applies, which immediate values are computed from deltas between labels, which items are required to be on the same page, etc. Only then does the code become as editable as any normal asm project. That's also a reason why there's less focus on 100% round-trip capabilities, because you need to go through everything anyway to enable making non-trivial edits.