# Decompiler vs Disassembler :::info Ein Programm vergleicht, ob eine Zahl gleich 10 ist. Wenn ja, soll "Counter = 10" ausgegeben werden, sonst "Counter not 10". Da die Zahl 7 statisch im Programm eingetragen ist, wird der erste Fall nie eintreffen. Egal, denn der Fokus der Übung liegt auf dem Unterschied zwischen Decompiler und Disassembler. Das Programm liegt in 2 Varinten vor: als C- und Java- Programm. ::: ## :memo: Datein (C, Java und Assembler): ### C: ``` #include <stdio.h> void main(int argc, char **argv){ int counter=7; if(counter==10){ printf("Counter=10 \n"); }else{ printf("Counter not 10 \n"); } } ``` ### Java: ``` public class counter { public static void main(String[] args) { int counter = 7; if(counter==10) { System.out.println("Counter = 10"); } else { System.out.println("Counter not 10"); } } } ``` ### Assembler: ``` main: mov b0, 7 mov b1, 10 CMP b0, b1 jZ Equals JMP NOTEQUALS Equals: ECHO Equalstxt break jmp Main NOTEQUALS: ECHO NOTEQUALStxt jmp Main Equalstxt: string " Counter = 10!" NOTEQUALStxt: String "Counter not 10!" END ``` ## Task 2: :::info Disassemblieren Sie counter.o mit IDA Pro und analysieren Sie die grafische Ansicht: lokalisieren Sie die Bedingungen und vergleichen Sie den Code mit YASP sowie Counter.c. ![](https://i.imgur.com/hXLGogG.png) ::: ## Task 3: Disassemblieren Sie nun counter.o mit onlinedisassembler.com. Finden Sie das Label main und machen Sie einen Screenshot von jener Codesequenz, die Ihrem YASP-Code enspricht. ![](https://i.imgur.com/AKm4jRa.jpg) ## Task 4: Dekompilieren Sie nun counter.jar mir jd-gui und/oder decompiler.com und vergleichen Sie das Ergebnis mit counter.java. :::success Mithilfe der Webseite decompiler.com können nicht ausführbare .jar (count.jar), in eine Java Datei umgewandelt werden, die dann gelsen werden können. ::: ## Task 5: Beschreiben Sie in eigenen Worten die Aufgabe und Funktionsweisen eines Decompilers im Vergleich zu Disassembler. :::success Ein **Decompiler** wandelt eine Binärdatei in Quellcode um - oder in etwas ähnlich Hochwertiges, das von Menschen leicht gelesen werden kann. Ein **Disassembler** ist ein Computerprogramm, das Maschinensprache in Assemblersprache übersetzt und nebenbei die umgekehrte Operation zu der eines Assemblers durchführt. :::