I've fixed many issues in this codebase, among other things - memory reallocation during decompilation.
To reflect those fixes, I've edited the original readme a bit.
The code provided in this distribution is (C) by their authors:
and is provided "as is". Additional contributor list is available on GitHub.
The following files are included in the dccoo.tar.gz distribution:
Note that the dcc_oo.exe program (in dcc32.zip) is a 32 bit program, so it won't work under Windows 3.1. Also, it is a console mode program, meaning that it has to be run in the "Command Prompt" window (sometimes known as the "Dos Box"). It is not a GUI program.
The following files are included in the test.zip file: fibo, benchsho, benchlng, benchfn, benchmul, byteops, intops, longops, max, testlong, matrixmu, strlen, dhamp. The version of dcc included in this distribution (dccsrcoo.zip and dcc32.exe) is a bit better than the first release, but it is still broken in some cases, and we do not have the time to work in this project at present so we cannot provide any changes. Comments on individual files:
scanf()
. This argument is the segment and is not displayed.scanf()
takes loc0 as an argument. This is
part of a long variable, but dcc does not have any clue at that
stage that the stack offset pushed on the stack is to be used
as a long variable rather than an integer variable.main()
code, LO(loc1) | HI(loc1)
should
be displayed instead of loc3 | loc9
. These two integer variables
are equivalent to the one long loc1 variable.DIV
and MOD
is broken. dcc currently
generates code for a long and an integer temporary register that
were used as part of the analysis.Our thanks to Gary Shaffstall for some debugging work. Current bugs are:
scanf()
For more information refer to the thesis "Reverse Compilation Techniques" by Cristina Cifuentes, Queensland University of Technology, 1994, and the dcc home page: http://www.it.uq.edu.au/groups/csm/dcc_readme.html
Please note that the executable version of dcc provided in this distribution does not necessarily match the source code provided, some changes were done without us keeping track of every change.
Here is a very brief summary of switches for dcc:
a1
, a2
: assembler output, before and after re-ordering of input code c
: Attempt to follow control through indirect call instructions i
: Enter interactive disassembler m
: Memory map s
: Statistics summary v
, V
: verbose (and Very verbose) o
filename: Use filename as assembler output file If dcc encounters illegal instructions, it will attempt to enter the so called
interactive disassembler. The idea of this was to allow commands to fix the
problem so that dcc could continue, but no such changes are implemented
as yet. (Note: the Unix versions do not have the interactive disassembler). If
you get into this, you can get out of it by pressing ^X
(control-X). Once dcc
has entered the interactive disassembler, however, there is little chance that
it will recover and produce useful output.
If dcc loads the signature file dccxxx.sig
, this means that it has not
recognised the compiler library used. You can place the signatures in a
different direcory to where you are working if you set the DCC environment
variable to point to their path. Note that if dcc can't find its signature
files, it will be severely handicapped.