Assembly and static analysis Flashcards
(35 cards)
Hvad er Assembly?
Det er et lavniveau-programmeringssprog, der direkte korresponderer med maskinens instruktioner
Hvorfor bruger man Assembly når man vil konvertere C++ kode i REM?
Det gør man for at analysere koden og for at gøre det mere læseligt for os.
Hvilke instruktioner er der i Assembly?
- Data movement
- Arithmetic
- Logical
- Control flow
- Stack
Hvad gør “Data movement” instruktionen?
Den flytter på dataen fra en lokation til en anden.
Eksempel –> mov
Hvilke kommandoer er der i “Data move” instruktioner?
- mov: move
- ldr: load
- str: store
Hvad gør “Arithmetic” instruktionen?
Det udfører matematiske udregner mellem to operands.
Hvilke kommandoer er der i “Arithmetic” instruktioner?
- Add
- Sub
- Mul
- Div
Hvad gør “Logical” instruktionen?
Den sammenligner to binære værdier for at få et binært tal tilbage ud fra en logical operation.
Hvilke kommandoer er der i “Logical” instruktioner?
- And
- Or
- Xor
- Not
Hvad gør “Control flow” instruktionen?
Den bestemmer om vi springer frem eller tilbage i programmet ud fra betingelser.
Hvilke kommandoer er der i “Control flow” instruktioner?
- Jmp
- Jnz
- Jz
- Call
- Cmp
Hvad gør “Stack” instruktionen?
Det er en hurtig måde at tilføje og hente data til og fra stacken.
Hvilke kommandoer er der i stack instruktioner?
- Push
- Pop
Hvad gør “push” instruktionen?
Det tilføjer en variabel til stacken og får den til at vokse for at gøre plads til mere.
Hvad gør “pop” instruktionen?
Det fjerner en variabel fra stacken og formindsker den.
Hvad er en lokal variable?
Det er en variabel der er defineret inden for en funktion eller scope.
Den er kun tilgængelig inden for sin egen funktion/scope og eksisterer midlertidigt under eksekvering.
Hvad er et argument?
Det er en værdi eller et objekt overført til en funktion ved kald.
Bruges som input til funktionen.
Hvad kan man bruge for finde ud af om de variabler der er gemt i “stack’en” er lokale variabler eller argumenter?
Man kan bruge ebp.
Hvordan ser man forskel på en lokal variable og et argument i Assembly kode?
Hvad er formålet med at kopiere esp til ebp i begyndelsen af et funktionskald i Assembly?
Formålet er at, ebp vil pege på, hvor esp var, før vi lavede plads til de lokale variabler.
Nævn de 3 forskellige “Function calling conventions”.
- Cdecl
- Stdcall
- Fastcall
Hvad gør “Cdecl” som er den mest hyppig brugte funktionskald?
- Argumenter placeres fra højre mod venstre i stakken med push- eller mov-kommandoer.
- Return placeres i EAX-registret (ved at bruge PUSH).
- Den er ansvarlig for at rydde op i stakken.
Hvad gør “Stdcall”?
- Bruges i Win32API.
- Ligesom “cdecl”, men her er funktionen selv ansvarlig for at rydde op i stakken
- I x64 fungerer Stdcall mere som Fastcall (bruger 4 registre til argumenter).
Hvad gør “Fastcall”?
Generelt ligner den “stdcall”, men ecx og edx bruges til at gemme de første 2 argumenter, mens resten er gemt i stakken.