Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: source code can be retrieved from an engine

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.