Add sheet 10

This commit is contained in:
Lukas Kalbertodt
2017-01-11 03:00:33 +01:00
parent 44ede1d228
commit 43c17ba30d
3 changed files with 134 additions and 0 deletions

View File

@ -0,0 +1,20 @@
Aufgabe 1: Assembly analysieren
===============================
In der Datei `magic.s` befindet sich der Assembly-Output einer geheimen Funktion.
Diese Funktion wurde mit `rustc 1.14` und aktivierten Optimierungen kompiliert.
Der Output wurde von mir nicht mehr verändert, entspricht also genau dem, was ihr auch sehen würdet, wenn ihr eure eigenen Programme analysieren wollte.
Analysiert das Assembly, um herauszufinden was die Funktion tut. Als kleiner Hinweis: Die Funktion hat folgende Signatur:
```rust
fn magic(u64) -> bool
```
Bestückt dazu das Assembly mit ausreichend Kommentaren, in denen ihr beschreibt, was jede Instruktion tut und warum das dann zu dem gewünschten Ergebnis führt.
*Hinweise*:
- Beachtet die Slide "komische Instruktionen".
- Unbekannte Instruktionen kann man meist einfach mit "jae instruction" googlen.
- Die meisten Seiten, die man findet bieten viel zu viele Informationen für Anfänger. Hier einfach mit einem ausgewählten Blick die Beschreibungen für Menschen und die relevanten Informationen durchlesen
- Ihr könnt euch am besten auf dem Papier immer aufschreiben, welcher Wert gerade in welchem Register ist. Sonst verwirren die Registernamen schnell.

19
aufgaben/sheet10/task1/magic.s Executable file
View File

@ -0,0 +1,19 @@
magic:
push rbp
mov rbp, rsp
mov rcx, rdi
mov esi, 2
.LBB0_1:
mov al, 1
cmp rsi, rcx
jae .LBB0_4
xor edx, edx
mov rax, rcx
div rsi
inc rsi
test rdx, rdx
jne .LBB0_1
xor eax, eax
.LBB0_4:
pop rbp
ret