Message-ID: <3304CFDE.1632@pobox.oleane.com> Date: Fri, 14 Feb 1997 21:49:34 +0100 From: Francois Charton Organization: CCMSA MIME-Version: 1.0 To: Alan Wilson CC: djgpp AT delorie DOT com Subject: Re: Quake Editing Utilites References: <2 DOT 2 DOT 32 DOT 19970214182748 DOT 006b01bc AT delilah> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Alan Wilson wrote: > > > It's not possible to take the files you have now and decompile them back to > the source??? Or once it is compiled and linked, there's no way to get back > the source? > Going back to the source is theoretically feasible for some part: you can get from machine code to ASM, and then to C; but you will lose some information, like function/variable names which are destroyed during compilation. Also, the code->source correspondance is not one to one: several C programs will yield the same machine code. However, it is always possible to write some C program, which compiles into the same code (provided you use the same compiler). A few years ago, I did that for Wolfenstein-3d, and decompiled a large part of the executable. When Id relased the source to it, I was able to cross check it and see my decompiled C code was basically right. However, this was pretty easy because it was compiled with BorlandC, which is a dumb, not much optimising, compiler... Just looking at the asm, guessing the C behind was fairly easy : there was one simple wat the compiler coded "for()" loops, another on for switch(), still another for do while, etc... With djgpp, I suspect this would be a bit harder, because it uses much more elaborate optimisation schemes (try compiling some large program with the "dump" options of gcc to see how complex it can be...). On the other hand, the source is available, so it can help reversing the compilation process. Moreover, decompiling by hand is a tedious task... And on large executables, it can be a *very* long job. What would be interesting would be to develop tools for this. I don't know any good programs for this. If anyone wants to start such a project, I'd be very happy to contribute. Francois