# 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.

:::
## 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.

## 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.
:::