@jdiffend
Actually, the disassembler I used to make the commented 2.? exec disassembly generated code that could be reassembled.
A program could be written to take that, make the patches with the existing tool and then optimize the code to remove stuff that isn't needed.
It would need to use register tracking similar to a modern optimizing C++ compiler AND would need to trace flag usage.
It would take a LONG time to build such a beast from scratch. I've spent some time in the guts of a few C compilers and it's not easy work... then add some stuff those don't have to do and it's a huge undertaking. All for a computer that has been off the market for over a decade.
Exec is quite trivial, it only has couple of arrays in it (which has relative offsets in them).
It gets much hairier with complex code that has baserel references, or even worse references with varying base. Those are pretty much impossible to resolve without actually executing the code.
Another problem is that you can't always be sure what is code and what is data. Automation will not get that right every time.
So while it might work for some random samples, it might easily produce sourcecode that while building ok, actually produces broken code, in worst cases in a way that it doesn't crash, but rather just generate bogus results.
There is no way to workaround this via automated software. Human interaction and guidance is required.