Zum Inhalt springen

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

Aus Wikiversity

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' . Programme nebeneinander 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]

Diff Befehl

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