Ahpah Software, Inc.

Frequently Asked Questions about SourceAgain - Updated 12/09/01

Q. What happens when Ahpah releases a small bug fix?
A.
The username and password that you get for our secure site will be good forever. You can connect to our site and get the latest version of SourceAgain at any time. We will send mail when a minor update is released.

Q. What's the real difference between SourceAgain Professional and SourceAgain Personal?
A.
SourceAgain Professional creates classfiles with debugging information, so you can use the classfiles in a debugger without recompiling.

Q. How do I save the output of SourceAgain in a file?
A.
Simply use your shell's redirection capabilities. Try executing the command

srcagain foo.class > foo.java
where foo.class is the name of your class file. This should create a file foo.java with the output of SourceAgain in it.

Q. How do I save the output of SourceAgain to the clipboard?
A.
On Windows NT, you can select the output in the DOS window, and right-click on it to send it to the clipboard. On UNIX, simply select the output with your mouse, and it goes to the clipboard automatically.

A better solution is to redirect the output to a file (as in the previous answer), and open that file in your favorite text editor.

Q. Why isn't the output of SourceAgain identical to my original Java code? I thought SourceAgain reconstructed my Java perfectly.
A.
SourceAgain produces equivalent Java code. We make every effort to make our output as close to "natural" Java as possible, but it is impossible to perfectly reconstruct your input for many reasons:

  1. The compiler may perform optimizations on your code. For example, a compiler may remove assignments to a variable that is not used.

  2. There are certain dualities (i.e., equivalent constructs) that we are forced to choose between. For instance, consider the following code:
            while(true)
            {
                if (a)
                    statement;
                else if (b)
                    statement;
                else if (c)
                    statement;
            }
            
    A "dumb" compiler might generate a single backwards jump at the bottom of the infinite loop, and have all the "else" clauses branch down to that jump. However, smarter compilers might "patch" this jump through, and branch right back to the beginning of the loop. To our flow analysis, this looks just like a series of nested loops. Although we special case the above construct because it appears frequently (when, say, processing command line arguments), there are certainly other constructs that are equivalent, and we must choose one.

  3. Sometimes, variables get re-used in insidious ways. For instance, what if you have a local variable (with, say, index 4 in the VM) that is currently being used as a reference to a Hashtable, and then it gets re-used as a String. Some compilers may optimize local variable usage through a process called "liveness analysis". It is important to determine whether or not a String is an ancestor class of a Hashtable, or vice versa. This is important because this may just be an innocent child class being passed to a function that expects a parent class, or this may be variable re-use. In the first case, we need to make sure the variable is declared properly, and in the second case, we need to make sure the variable is RE-declared.

Q. What's with this command line interface? I haven't used my DOS shell in years.
A.
We chose to implement SourceAgain Personal as a command line tool for a few reasons. First, it greatly enhances the portability of SourceAgain. SourceAgain runs on any flavor of UNIX, and Windows NT/95. In addition, we felt that the imposition of a user interface on top of what is essentially a text tool was superfluous.

Also, SourceAgain Professional and UNIX produce source code and classfiles that interoperate with popular IDEs. This is the result of SourceAgain Professional/UNIX producing cross platform debugging information.

Q. I'm using a Java development environment that you don't mention on your products page. Can I still use SourceAgain Professional?
A.
Yes, but in a slightly less integrated way. SourceAgain Professional is able to generate the crucial debug table information for your classes from the command line as well as from supported IDEs. Therefore, you can simply decompile the class you want to debug, and make sure that the directory in which SourceAgain Professional is placing its output appears early in your CLASSPATH. This is essentially what the plugin does automatically. Then, you should be able to step in to the newly debuggable class file in any environment. Documentation on this process is available with SourceAgain Professional.

Q. The class file I want to decompile is behind a firewall. Can I still use your online demo on it?
A.
Unfortunately, no. Our demo needs to access the class file you specify in the URL from our web server. If you are behind a firewall, that is not possible. One possible solution to this problem is to put the class file temporarily somewhere outside the firewall, and point our demo at that outside copy.

Q. I'm running AIX/SunOS4/Open Edition/FreeBSD/OSF/VMS/Plan9/OS8/CPM. Shouldn't you just be able to recompile your UNIX version for my UNIX flavor du jour?
A.
Yes. SourceAgain compiles and runs on every system we've ever tested it on, without a problem. However, due to limited resources, we cannot maintain and update versions for flavors of UNIX we do not own. If you would like to donate a machine for us to do builds on, we will be happy to support your favorite platform.

Q. What does SourceAgain do with inner or anonymous classes?
A.
SourceAgain will decompile inner or anonymous classes at their correct position in the source file. Of course, since these inner classes are in separate .class files, all inner .class files will have to be in your CLASSPATH. SourceAgain also has an option to decompile inner classes as regular "outer" classes.

Q. Your decompiler defeated my obfuscator. I'm sick of these name-manglers that don't protect my code. Where can I get an obfuscator that makes reconstructing equivalent code as hard as, say, breaking RSA?
A.
After years of research we determined that this was simply not possible.

Q. Are you hiring? ,
A.
No, not at this time

Do you still have a question that we did not answer? Send mail to info@ahpah.com and we'll get back to you with an answer.

[Home] [Company Info] [Products] [Sales] [Support]

©2004 Ahpah Software, Inc.
info@ahpah.com