Kurs:Wie funktioniert eigentlich ein Computer/Themen/Aufgabe2 Finden eines Additionsbefehls im kompilierten Programm

Aufgabe 2 - Thema : Finden eines Additionsbefehls im kompilierten Programm

Bearbeiten

Aufgabenstellung

Bearbeiten

Wir haben ein Programm, welches zwei Zahlen miteinander addiert. Nun wollen wir herausfinden, an welcher Stelle der Befehl für die Addition im kompilierten Programm steht.

Lösungsansätze

Bearbeiten

Unsere Idee war es, zwei möglichst einfache Programme zu schreiben. Der einzige Unterschied sollte sein, dass das eine Programm 2 Zahlen addiert und das andere die gleichen Zahlen subtrahiert. Im Quellcode können wir den Unterschied sehen, nun wollen wir wissen, wo in der "Maschienensprache" der Unterschied liegt. Da es uns nicht möglich war, den binären Code zu verändern und dieses auch zu unübersichtlich gewesen wäre fiel diese Option weg. Dann wollten wir uns die Hexadezimalcodes der beiden Programme 'anschauen', vergleichen und so den Unterschied -also die Stelle, an der die beiden Zahlen verrechnet werden- finden.

Beispiellösung

Bearbeiten

Zu den Beispiellösungen:

Alle Befehle für Ubuntu bzw. Emacs werden mit'-->' gekennzeichnet.

1. Schreibe zwei Programme , 'plus.c' [1] und 'minus.c' .   2. Beide Programme kompilieren.

--> gcc 'plus.c' -o 'plus'
--> gcc 'minus.c' -o 'minus'

3. --> Objdump -d 'plus' > 'plusausgabe' [2]

--> Objdump -d 'minus' > 'minusausgabe'

4. --> diff 'plusausgabe' 'minusausgabe' [3]

Alternative: --> diff -y 'plusausgabe' 'minusaugabe' > 'vergleich' [4]

 

Fußnoten:

  1. Alle Namen die in einfachen Anführungsstrichen stehen sind beliebig wählbar
  2. Dieser Befehl zeigt das Programm in den einelnen Hexadezimalcodes und die jeweiligen Opcodes an.
  3. Dieser Befehl gibt einem den genauen Unterschied mit Zeilen angabe aus.
  4. Dieser Befehl erzeugt eine neue Datei ( in diesem Fall namens 'vergleich') in der die beiden Programme 'plusausgabe' und 'minusausgabe' nebeneinander gestellt werden und verglichen werden können. Die Datei kann einfach mit emacs geöffnet werden