mirror of
https://github.com/LukasKalbertodt/programmieren-in-rust.git
synced 2025-06-29 00:07:31 +02:00
Add sheet 10
This commit is contained in:
20
aufgaben/sheet10/task1/README.md
Executable file
20
aufgaben/sheet10/task1/README.md
Executable 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
19
aufgaben/sheet10/task1/magic.s
Executable 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
|
Reference in New Issue
Block a user