Assembly and static analysis Flashcards
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.
Hvad er “Stacken”?
Det er en array-agtig datastruktur i hukommelsen som gemmer data midlertidigt fra funktions kald mens programmer eksekveres.
Hvad gemmes i “Stacken”?
- Lokale variabler
- Funktions parametre
- Retur adresser
- Stack frame pointers
- Mellemliggende resultater
- Gemte registers
Hvor starter “Stacken”?
The top of the stack.
Hvor er den højeste adresse i “Stacken”?
The bottom of the stack.
Hvor vokser “Stacken” imod?
Den laveste adresse.
Hvad er en LIFO struktur?
- Last in first out.
- Det betyder at det sidste data bliver den første som bliver fjernet igen.
Hvad er [esp], [ebp+8], [ebp-4] ?
Positioner.
Forklar linje for linje hvad der sker her:
1. mov dword ptr [ebp-4], 3
2. mov eax, dword ptr [ebp-4]
3. mov dword ptr [ebp-8], eax
- Værdien 3 bliver flyttet til positionen ebp-4
- Værdien fra position ebp-4 bliver flyttet til eax register
- Værdien fra eax rigister bliver flyttet til position ebp-8
Hvad er esp?
- Extended Stack Pointer.
- Der er et register, der peger mod toppen af stakken og holder styr på, hvor nye værdier skubbes eller poppes
Hvad er eip?
- Extended Instruction Pointer.
- Det er et register, der indeholder hukommelsesadressen for den næste instruktion, der skal udføres.
Hvad er static analysis?
?