10: Smalamálsforritun Flashcards
Gagnaflutningsskipunin mov er til í nokkrum útgáfum :
Eftir því hversu mörg bæti mov flytur
movb
Flytja eitt bæti
movw
Flytja eitt orð (2 bæti)
movl
Flytja eitt tvíorð (4 bæti)
movq
Flytja eitt fjórorð (8 bæti)
0x
Hex tala
Ekki 0x
Tugatala
movb $-17, (%esp)
Setja töluna -17 í hólf sem esp bendir á, movb segir okkur að þetta sé 1 bæti
Svigi og ekki svigi
Ekki svigi : Setja í gistið sjálft
Svigi : Setja í hólf sem () bendir á
movq %rax, -12(%rbp)
Færum %rax í það sem rbp bendir á en bætum -12 við það sem rbp bendir á, movq segir að við séum að fara átta bæti
Viðföng geta verið ?
gisti eða minnisvistfang
Þegar minna gildi er flutt yfir í stærra hólf þá þarf að
víkka (extend) gildið
Núllvíkkun: Bæta 0-um fremst
Formerkisvíkkun: Bæta gildi formerkisbita fremst
movzsd
Núllvíkkun (move zero)
movssd
Formerkisvíkkun (move sign)
s getur verið
b, w eða l (bæti,word eða long word)
d getur verið
w, l, q
movzbl (%rax), %eax
1 bæti verður að fjórum bætum
núllvíkkka
movzwq %dx, (%rsp,%rdx)
Hvert ert gistið?
Innið haldið á rsp plús innihaldið á rdx mynda gistið
leaq
Skipun sem reiknar vistföng
Load Effective Address Quadword
Notkun á leaq
Reikna vistföng án minnistilvísunar
Reikna reiknisegðir af gerðinni x + k*y
addq (Src,Dest)
Dest = Dest + Src
subq (Src,Dest)
Dest = Dest - Src
imulq (Src,Dest)
Dest = Dest * Src
salq (Src,Dest)
Dest = Dest «_space;Src
sarq (Src,Dest)
Dest = Dest»_space; Src
Formerkisbiti
shrq (Src,Dest)
Dest = Dest»_space; Src
Alltaf núll
xorq (Src,Dest)
Dest = Dest ^ Src
andq (Src,Dest)
Dest = Dest & Src
orq (Src,Dest)
Dest = Dest | Src
incq (Dest)
Dest = Dest + 1
decq
Dest = Dest - 1
negq
Dest = − Dest
Neita, tvíandhverfa
notq
Dest = ~Dest
Flippa öllum bitunum
rdi
fyrsta viðfangið
rsi
annað viðfangið
rdx
þriðja viðfangið
Frá C yfir í keyrslukóða
þýða Forrit í skrám p1.c p2.c
Þýða með skipuninni: gcc –Og p1.c p2.c -o p
Compiler Explorer (godbolt.org) leyfir okkur að?
Skoða smalamálskóða mismunandi þýðenda:
Línur sem byrja á “.” eru ?
tilskipanir (directives) tengiforritsins (linker) og
segja m.a. til um skipulag stefsins og hvernig það notar minni
Hvað er skipunin endbr64 ?
Þetta er öryggisráðstöfun til að tryggja að hopp geti ekki stokkið inn í miðjar skipanir.
Hægt að slökkva á þessu með gcc rofanum
-fcf-protection=none
Hvað gerir Smali (assembler)?
Þýðir .s yfir í .o
Breytir smalamálskóða yfir í vélamálskóða
Hvað gerir Tengir (linker)?
Leysir úr tilvísunum á milli skráa
Tengir við keyrsluforritasöfn
Afsmali (disassembler)
Breytir vélarmálskóða yfir í smalamálskóða
objdump –d sum
Afsmali
Hægt að keyra á a.out (keyrsluskrá) eða .o skrá
Líkt hægt að afsmala með?
gdb