Sie befinden sich hier: Termine » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 1 » Allgemein   (Übersicht)

Allgemein

Fach: Reverse Engeneering
Prüfer: Tilo Müller
Note: 1,0

Lockere Athmosphäre
Vor der Prüfung wurde kurz erklärt, was mich im Assemblerteil so zu erwarten hat. Danach ging es dann auch gleich los.

Assembler

Vorgelegt war Assemblercode, bei mir zur Fakultätsfunktion. Es war unoptimierter 64 bit Code in Intel Syntax. Die Funktion wurde dann gemeinsam analysiert, in dem er schrittweise zu einzelnenen Zeilen Fragen gestellt hat. Es hieß also nicht „Was macht das Programm?“, sondern ging schrittweise voran (für mein Gefühl schon zu langsam, nachdem wir ein gamzes Semester Assembler gelesen haben ;) )
Fragen waren ungefähr folgende:

  • 32 oder 64 bit?
  • Prolog Epilog einzeichnen
  • Welche CallingConvention (er hat dazu gesagt, wurde für Linux compiliert → System V; man muss dafür nicht in den Code schauen)
  • Kurzer Exkurs Calling Conventions: Beide 64 bit und die 3 32bit (cdcl, stdcall, fastcall) unterschiede erklären. Bei den 64bit wollte er auch die Reihenfolge der Register wissen. Und welche Convention nutzen Linux Syscalls? - Eine eigene, die Fastcall ähnlich ist
  • Wieviel Parameter gibts es? - einer, edi
  • Was wird damit am Anfang gemacht? - Er wurde in eine lokale Variable geschrieben
  • Kann das ein Pointer sein? - Nein, weil Pointer 64 bit wären
  • Was ist es dann vermutlich? - int32_t
  • Basic Blöcke markieren
  • Es gibt einen Abbruchfall, wann tritt der ein? - wenn [0x…] == 0 (Lokale Variable, nicht edi wurde verglichen)
  • Hier wird der Vergleich mit cmp gemacht. Was macht cmp?
  • Geht der Test auf == 0 auch anders? - Ja mit test
  • Wie sieht das dann aus? test [0x…], 0x0? - Üblich ist test edi, edi. Ich hab gemeint test [0x…], edi wo er sich nicht ganz sicher war ob das gültig ist, hat es aber gelten lassen. test [0x…], [0x…] wäre aber falsch, weil 2 Speicherzugriffe
  • Hier wird eine Funktion aufgerufen. Was fällt auf? - Rekursiv
  • Mit welchen Parametern? - edi - 1
  • Was passiert dann weiter? - Hier wurde dann der restlichen Zeilen analysiert
  • So und was berechnet die Funktion nun? - Fakultät

Danach musste ich dann noch den Stackframe einzeichnen (Achtung, Parameter liegen nicht auf dem Stack, weil System V)

  • Dein Stackframe ist kurz, aber hier steht sub esp, 0x10? - ungenutzter Speicherbereich
  • Die zwei Zeilen, machen die Sinn? (mov [0x…], edi; mov edi, [0x…]) - Nein, ist halt gcc -O0

Das wars dann auch schon mit Assembler. (Sieht lange aus, aber dauert nicht so lang)

Den Rest schreib ich später ;)