Machine language without such metadata or debug data is much harder to decompile. Some compilers and post-compilation tools produce obfuscated code (that is, they attempt to produce output that is very difficult to decompile, or that decompiles to confusing output). This is done to make it more difficult to reverse engineer the executable. While decompilers are normally used to (re-)create source code from binary executables, there are also decompilers to turn specific binary data files into human-readable and editable sources. Design ĭecompilers can be thought of as composed of a series of phases each of which contributes specific aspects of the overall decompilation process. The first decompilation phase loads and parses the input machine code or intermediate language program's binary file format. It should be able to discover basic facts about the input program, such as the architecture (Pentium, PowerPC, etc.) and the entry point. In many cases, it should be able to find the equivalent of the main function of a C program, which is the start of the user written code. This excludes the runtime initialization code, which should not be decompiled if possible. If available the symbol tables and debug data are also loaded. The front end may be able to identify the libraries used even if they are linked with the code, this will provide library interfaces. If it can determine the compiler or compilers used it may provide useful information in identifying code idioms. For example, the Pentium machine instructionĬdq eax edx is set to the sign-extension≠edi,edi +(tex)push xor eax, edx sub eax, edx The next logical phase is the disassembly of machine code instructions into a machine independent intermediate representation (IR). Some idiomatic sequences are machine independent some involve only one instruction. For example, xor eax, eax clears the eax register (sets it to zero). This can be implemented with a machine independent simplification rule, such as a = 0. In general, it is best to delay detection of idiomatic sequences if possible, to later stages that are less affected by instruction ordering. For example, the instruction scheduling phase of a compiler may insert other instructions into an idiomatic sequence, or change the ordering of instructions in the sequence. Some of these games aren't exact remakes but evolution of original ones, which were eventually open sourced.Ī Clone is a game which is very similar to or heavily inspired by a game or series.Īn Official project is the official source code release for a game that was formerly closed-source, maintained by the original creators and has minimal changes.Ī Similar game is one which has similar gameplay but is not a clone.Ī Tool is not a game, but something that assists in playing or modding the game, such as a high resolution patch, or resource extractor.A pattern matching process in the disassembly phase would probably not recognize the altered pattern.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |