Author: Joseph Tadeusz
Date: 07:33:09 02/02/06
Go up one level in this thread
On January 31, 2006 at 14:22:36, Dann Corbit wrote:
>On January 28, 2006 at 16:07:15, Uri Blass wrote:
>
>>On January 28, 2006 at 15:54:46, Sebastian Leibnitz wrote:
>>
>>>Look here:
>>>
>>>http://www.program-transformation.org/Transform/AutomaticDecompiler
>>
>>Thanks
>>
>>If I understand correctly it is even not possible to get assembly code of a
>>program automatically and the user need to guess things.
>
>100% correct decompilation is PROVABLY impossible (it has been shown to be
>equivalent to the question "Will the Turing machine halt?")
>
>On the other hand, for specific machines and specific compilers, it is possible
>to write decompilers that are generally helpful most of the time.
>
>You can't turn the hamburger back into the cow, no matter what anyone says. But
>you can figure out things like "What kind of cow was it?" "What part of the cow
>did this come from?"
>
>The comments are gone. The helpful variable names are gone. The code will be
>much larger and will have been rearranged by the compiler.
>
>We can take a decompiler or disassembler and get back half of the information we
>are looking for. With human intervention, maybe 75%. But we are not going to
>get back our original program.
>
>That's on the one hand. On the other hand, with something like the IDA together
>with someone who knows assembly can clearly recover the basic algorithms.
>
>On the other, other hand, it is going to be a lot of work. Nobody is going to
>push a button and have the original program spit out the other end. It is going
>to be a program similar to the original (clearly NOT identical) and with most of
>the human readable stuff stripped out. So several passes would be needed to
>figure out what is going on.
>
>Consider even a program with all the variable names and comments intact like
>Fruit 2.1 or Crafty 19.20 as examples. Will you simply read and understand 100%
>of what is going on? Now change all the variable names to things like EAX and
>remove all the comments. How about now?
Take this program:
int main()
{
return 0;
}
A decompiler gives this:
L00401000()
{
return 0;
}
- we know it has to be main().
- we know it has to return an int.
- we know include files are not necessary.
All this disproves your point that 100% correct decompilation is impossible.
QED
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.