A disassembler is a computer program that converts the binary- coded machine language of an executable program into an assembly language that is more human-readable . Its functionality is opposite to that of an assembler .
For each processor command there is a corresponding command in assembly language, a mnemonic . The individual arguments of the processor instructions , such as register numbers or memory addresses , can also be transferred one-to-one in assembler code. A disassembler translates the binary representations of the processor instructions back into human-readable assembly language.
In the case of a program that was written in assembler, the original code cannot generally be restored in the original text, but only functionally identical. Pseudo instructions, labels and comments are chosen by the programmer and therefore have at least no direct, i.e. H. clearly reversible correspondence in the machine code, which makes the exact textual reconstruction impossible. In the case of a program that was written in a high-level programming language, the compiler has usually made various optimizations that accelerate program execution but make the machine code more complex.
A disassemblat is therefore usually much more difficult to read than the original assembler code. For this reason, too, it makes sense and is customary in more complex program sections not to disassemble fully automatically in a single pass, but rather in repetitions with manual intermediate steps. From step-by-step experience and knowledge, identifiers for jump labels , subroutines , variables , constants and comments can increasingly be refined manually and specified in subsequent runs for optimization.
Most of the time, the purpose of a disassembler is to make it easier to diagnose and find potential errors in a program, or to check the output of a compiler. It is also often used for reverse engineering .
Proprietary software is often subject to an EULA that prohibits disassembly and decompilation . However, this is only in rare cases legally binding in Germany. Reverse engineering to create compatibility with third-party software is also expressly permitted by law - and therefore cannot be prevented by a license agreement.
In some countries, however, the disassembly of programs protected by copyright is regulated by legal provisions, since disassembly opens up the possibility of changing the code and then assembling it again into a program. So could z. For example, experienced assembler programmers and crackers remove a password query, activate a function that has been deactivated for licensing reasons, or introduce a virus into the program without being noticed. Detailed explanations of this aspect of disassemblers and comparable tools can be found in the article Reverse Engineering .
Almost all debuggers , some programs for inspecting binary files and some assemblers contain a disassembler. A well-known and frequently used disassembler is IDA by Ilfak Guilfanov, which can display assembly code in a structured manner.
The process of disassembling is synonymous with the terms “disassembling” in German-language specialist literature or, incorrectly, is called “uncompiling”. The latter would correctly mean decompiling.
- In Germany according to UrhG (decompilation)