Inferno #06
03 декабря 2004

For Coderz - Decompiling programs - the revival of the old prog.

<b>For Coderz</b> - Decompiling programs - the revival of the old prog.
   Decompilation of programs

         Revive the old program!



   Many have long been initiated projects idle. Authors, 
forever leaving a Down throw their utility, and spit on the 
user and erase the source. Your soul is aching for these 
programs? Sometimes not enough seemingly small things 
differently, written Mountains code re-do the same thing 
offensively ... 


   So, long ago there is an opportunity to revive anyone ever 
written ZX Spectrum for the project!




   Not much emphasis is given to the fact
that (and because many do not know or do not represent in 
volume) now existing sources ALASM, PT3, PkUnZip, UnRar, RIP, 
Pusher - decompiled. Version of the ZX Word, adapted ZS'om from 
Samara, based on the author's decompiled code that ZS, however, 
does not spread. ZIP-depakera engine in his own MMCM player is 
also based on decompiled code, which is too long

not distributed (by Volga Soft). JPEGIF
laboratory of Sam Style began with decompilation JPEG viewer by 
Alien Factory. AND so on. Sometimes decompile occurred

due to a misunderstanding of the fact that the source
were considered lost (in the JPEG engine JPEGIF,
UnRar). Authors rarely recovers its
program accidentally overwritten (Pusher). Sometimes the old 
sources because of the greed of their holders proved obsolete, 
because program many times and broke the finishing straight to 
machine code, without source (ALASM). In the latter case is

Tip: if something appends to
machine code, ogranizuyte all these changes in the form of 
source code (INCBIN original code, then a lot of ORG with 
pieces of programs) and even then they all will not find when 
you are camping this source! 

   Generally, the source may be
most strange events - such as my source Worms demo once 
transferred from MASM in ALASM manual copying on paper, then 
with a piece of paper. Sometimes, disappears one module of 
source code on the disk of the author (EWS v1.1, STS v5.2). Or, 
again, the author no one knows where the source is lost entirely

(Hrip) ...


           Decompilation of the dump.


   Interrupt the boot the desired program
After unpacking all the code blocks, unload the main block of 
code (the program as any) to the desired starting address. This

block you will decompile. How to stop boot - another 
tema.Obychno system programs are not protected enough to load 
BASIC in the STS, to find the entrance and exit, then put a 
breakpoint on the exit. If you have a shadow debugger (STS in 
the ROM shadow service minitor or Unreal Speccy), it is even 
easier. Program during the better not to upload - it can be in 
this while defective, with the destruction of the 
initialization, wrong content variables, etc. 

   If a program uses sophisticated
structures that are likely to lie outside of the program (for 
example, the headline format, which operates the program - both 
in PT3), add zeros to the end of this code block. And that then 
have to manually search for all references to variables outside 
of the program, elementary possible some miss, and the 
structure becomes unmovable! 

   Get the code block in the ZX Turbo Disassembler (ZXD) by 
Alex Inozemtsev. There are 2 versions ZXD: 1.0 (authoring, 
unloads a ZX-ASM, more precisely, in the text with tabs, 
special for ZX-ASM) and 1.1 (cracked by Viper / TL - unloads in 
ascii, but I do not like there colors). I tried

use the first, for example, to decompile Mr Gluk Reset Service, 
and the second - to decompile Pefrect Commander. STS'om

and DASM'om (by Jaguar / PHD) is better not to try - that 
memory for the label came to an end, you will be very 
unpleasant to find out when you already typed all the addresses 
of data blocks in program.


   So, what I mean. Mark means ZXD all the data (single-byte 
DEFB, double-byte DEFW and long loadable INCL), to distinguish 
them from the code Z80. 

   After the first crude arrangement of press
Make Labels on the menu, and on labels for certain
be able to find errors in your razbienii.Chem
the more you fix them back in ZXD, the less the need to 
manually transfer from assembler code, and vice versa on the 
next steps in ALASM. 


   Save the project just in case (there
and will lie your way to the partition) and the decompiled 
program to disk. 

   If you enjoyed ZXD 1.0, then the texts
need to be translated into normal form, replacing
Custom ZX-ASM'ovskie tabs with spaces. This can be done in 
ACEdit (I did therein).



             Renewal of the dump.


   Received a lot of texts to download
ALASM teams impOrt. It is advisable to load them into memory 
all at once. Each file takes slightly less than half 
ALASM'ovskoy pages, but combine them with the reserve -

approximately half the file on the page,
as they swell to comment and long labels. Cut on the Limits of 
the procedures. 

   More procedures, which will find (if
not initially clear, then all tags
standing after RET absolute and unconditional JR / JP), mark 
the "bookmarked" by separating label procedures to 
stroki.Perehodit between They can be the cursor in Ext + L.


   While you are walking on the program from end to end, notice 
neoptimizirovannosti, Unused parts and repetitions, was 
isolated from the line shift to the right (this I select the 
right, and you can differently). 

   Changes nothing in the program will now!
On the contrary, periodically check that the code block that 
you get when you assemble, identical to the one you dumped on 
the ground etape.Dlya There are several programs "File 
Comparer". I take such a program from Mayhem. Previously, 
compared with writing a piece of code with XOR (Inconvenient, 
when the unit takes more than half the memory). PT3 (most of my 
first decompilation), I did not compare. Because of this

retained more than a hundred versions of the intermediate
decompiled source code (Hard to suddenly
into misery or something - where to get, with what
check?) Then during the heap versions shoveled errors. The 
lesson to me and you. 


   Separately from the previous step (before
or after, but not both - distracted, as if chasing two hares)
translate all the constants in a convenient and understandable 
form. If the constant is used in Playing as a character, then 
let it be the letter (ZXD default does so), otherwise the 
number. Sometimes decimal understandable 16-ary. On

amateur - binary. Naturally, the extra
zeros after the # is also no good.

   In ZXD error - negative bias
for IX and IY had increased by 256. Not
surprised if will not compile. May still need to replace the XH
HX and the like.


   To find out what all the encountered tag frequency 
ispolzovaniya.Eto done as follows: replace the symbol L in the 
label name to something another, and recompile. (You can

for several labels, if compiled for a long time. An emulator 
with the turbo button things quickly.) then recover, as it was.

Result (how many times have popped up an error)
that he was not gone, write over metkoy.Vot
as follows:

3
L867F



   2 error "not defined" and "wrong short"
should be considered for one. If the error
eye for more than 10, then write "many", it is
easier than figuring out how many exactly. If
number is small, then the mark may be
local to this procedure (check
replacing it with the name of the place and the immediate 
appeals and recompile), then mark it as follows: 

_867F


   (And remove the number - it was not for local
useful). For non-local labels figure
1 or 2 may mean that the procedure is highlighted in the 
process uneconomical. But in each If necessary to estimate and 
compare the length code subroutine outside a subroutine and 
contributed by inline (instead of calling for CALL simply write 
its contents). 


   Tags, which are completely understood (such as
CLS procedures and DHL), rename, replace
all calls through a search and replace.


   Can run into the mark, standing with the imperfect is not 
the topic. They were there: 

  a) due to the fact that you have transferred manually
 piece of code in the data;

  b) due to the fact that some programs do not work melts with 
those addresses (DISP); 

  c) due to the fact that part of the program zati raetsya 
during the data; 

  d) due to the fact that it does not address and Cons tantalum 
(like # 7ffd); 

  e) ...

   In general, each case requires review.
Out in ALASM is a function of the text search.
Just look for circulation to the label on all
program modules. If it's still DISP,
place an appropriate site as DISPENT, and labels will have to 
place (drag the program from other places because they 
Logically already somewhere defined) manually. 


   Sometimes, the label is used exclusively
in unused procedures of the program (they
could be in the code accidentally, even with
other system addresses! For example, the author does not
clear the memory when compiling), in which case tick mark 
somehow, then it can be removed. For example, all such labels, 
as well as addresses of data external to to the program, I put 
at the beginning of the first (main) source. 


   Variables in the body of the program ZXD draws as follows:



        LD BC, 0
L67B4 EQU $ - # 0002
L67B5 EQU $ - # 0001


   Them, I usually corrects for this:

L67B4 = $ +1
 L67B5 = $ +2

        LD BC, 0


   However, the label L67B5, if it is used in the program only 
once, it is better to this place is replaced by the expression 
L67B4 +1. Similarly, for external data (where the adjacent 
addresses can be identified, for example, when cleaning 
LDIR'om. It makes sense to call labeled only at this address 
less cleaning). 


   In no case can automate these processes. Because at the time 
they you become acquainted with programmoy.Programma thing

thin. Program must be understood.


   As a result, you will probably be moved (check by running 
with different number of NOP'ov in different places), however, 
obscure ishodnik.No, since he had already issued convenient to 
use (similar to a program, not the dump), to understand it 
better. Usually at spaced markers in the middle Programme for 
7000 lines (somewhere 900 marks) takes a couple of weeks. This 
is quite a creative process, but it almost always is. Can leave 
some procedures without a name, if your planned changes in 
program must be in other places. Then he will understand, in 
the optimization process (Because you are some stations have 
already tagged shift to the right - to optimize?) and 
navorachivaniya. 

   All changes in the initial stage (when
you are still not very understand the program and
it may worsen) mark, for example,
shift lines to the left. Again, this is my
personal way, but it paid off. I mark the shifts and changes in 
their own programs, and retracts the line back then, when sure 
of their correctness and optimality. 



   A month later, the decompiled source code
no one is distinguished by the type of avtorskogo.Zhelatelno 
its spread, as you yourself can also score for the project as a 
writer. 

A. Coder




Other articles:

Inferno - Entered from the editor.

Interview - Interview with AIG - coder from the group MKHG.

Softinka - ACE 0.888: different from 0.666

Softinka - macro assembler debugger ALASM 4.47: difference from 4.44

For Coderz - Arithmetic coding.

Inferno - The authors of the magazine.

Softinka - BGE 4 graphical editor for ZX.

Events - The Compo 2: The results of the vote.

For Coderz - Decompiling programs - the revival of the old prog.

Inferno - Errors in the previous numbers.

For Coderz - Small programmers' tricks.

DIY - The scheme of my elektrofumigatora.

Gameland - about passed games: Imperia 2, Hexagonal Filler, From Beyond.

Iron - device extended keyboard (58 keys).

Gamedev - Gaming cycle - a cycle within which caused all the sub games.

Gameland - the passage of Lords of Time on Level 9.

For Coderz - Macros Part 2 - makes your life in programming.

Inferno - Letters to the Editor.

Gameland - passing a level playing Raven Black.

For Coderz - Description of the modular structure of programs.

Inferno - On the shell.

Softinka - the benefits of packing algorithm Optimal LZH.

Events - Serpukhov Festival ParaDiGMus party 2003. As it was.

Events - Serpukhov Festival ParaDiGMus party 2003. Afterparty.

Gameland - the passing game The Price of Magik by Level 9.

Iron - Description of a block of memory from the printer Robotron CM 6329.01 M. Part 1.

Iron - Description of a block of memory from the printer Robotron CM 6329.01 M. Part 2.

Advertising - advertising and announcements.

DIY - advice on repair hours, Dream Cast and joystick.

Interview - An Interview with Shaitan / Stars of Keladan: Interred Inferno.

Gameland - the passing game from the Level 9 Snowball.

Iron - Video GoldStar RN800AW Art vision. The history of repair.

Iron - Video GoldStar RN800AW Art vision. Tips on disassembly and repair.

Interview - an interview with musician Visual ^ Extreme (Sergei Agapov).

Gamedev - the assembly of the game Wolfenstein 2004. Part 1.

Gamedev - the assembly of the game Wolfenstein 2004. Part 2.

For Coderz - How to get the sound device more bits.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:

В этот день...   21 November