• Nem Talált Eredményt

Vezérlésfolyam gráf és X86 utasításkészlet Kód visszafejtés. Izsó Tamás 2016. november 3.

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Vezérlésfolyam gráf és X86 utasításkészlet Kód visszafejtés. Izsó Tamás 2016. november 3."

Copied!
57
0
0

Teljes szövegt

(1)

Vezérlésfolyam gráf és X86 utasításkészlet

Kód visszafejtés.

Izsó Tamás

2016. november 3.

(2)

Procedure Intervals(G={N, E, h})

=:={}

H:={h}

for(∀nnem bejárt pontranH) do I(n) :={n}

repeat

I(n) :=I(n) +{mNahol∀pPred(m)pontra teljesülpI(n)}

until nincs több csomópont, ami hozzáadhatóI(n)hez H:=H+{mN|m/H V

m/I(n) V

(∃pPred(m)amelyre teljesül hogypI(n))}

===+I(n) end for end procedure

(3)

Az eljárás egy vezérlésfolyam gráfotG={N,E}és egy kezd ˝opontothkap, és az intervallumok halmazát=adja vissza.

Azokat a csomópontokat tesszük egy intervallumba, akikbe olyan helyr ˝ol mutat él, amelyeket már felvettünk az aktuális intervallumba (bels ˝o repeat ciklus).

Azok a pontok, amelyekre az intervallumban lév ˝o csomópontokból mutat él, egy következ ˝o intervallum kezd ˝opontját képzik, és ezek aH (head) halmazba kerülnek.

(4)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15

(5)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15

B1 H1={B1}I1={B1}

(6)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

H1={B1}I1={B1,B2}

(7)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3

H1={B1}I1={B1,B2,B3}

(8)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

H1={B1}I1={B1,B2,B3,B4}

(9)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

H1={B1}I1={B1,B2,B3,B4,B5}

(10)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6 B15 pont nincs azI1halmazban ezért új intervallumot kell létrehozni!

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6}

(11)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7}

(12)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

B8

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7,B8}

(13)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

B8

B9

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7,B8,B9}

(14)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7,B8,B9,B10}

(15)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7,B8,B9,B10,B11}

(16)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7,B8,B9,B10,B11,B12}

(17)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13 B14 pont nincs azI2-es halmazban ezért új intervallumot kell létrehozni!

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7,B8,B9,B10,B11,B12}

H3={B6}I3={B13}

(18)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7,B8,B9,B10,B11,B12}

H3={B6}I3={B13,B14}

(19)

B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15 B1

B2

B3 B4

B5

B6

B7

B8

B9

B10

B11

B12

B13

B14

B15

H1={B1}I1={B1,B2,B3,B4,B5}

H2={B6}I2={B6,B7,B8,B9,B10,B11,B12}

H3={B6}I3={B13,B14,B15}

(20)

Fubo Zhang és Erik H. D’Hollander bebizonyították, hogy az általuk definiált három elemi programtranszformációs lépés

Forward Copy, Backward Copy, Cut

segítségével minden nem strukturált programrész strukturált formává alakítható.

Módszerüket magasszint ˝u blokk strukturált programozási nyelvre alkalmazták.

Haicheng Wu és társai kisebb átalakításokkal a módszert assembly szint ˝u programra is alkalmazhatóvá tették.

Cikkek:

Fubo Zhang and Erik H. D’Hollander. Using hammock graphs to structure programs. IEEE Trans. Software Eng., 30(4):231-245, 2004.

Haicheng Wu, Gregory Diamos, Jin Wang, Si Li, and Sudhakar Yalamanchili.

Characterization and transformation of unstructured control flow in bulk synchronous gpu applications. Int. J. High Perform. Comput. Appl., 26(2):170-185, May 2012.

(21)

A következ ˝o ábrán a{B1,B2}és a{B3,B4}blokkok IfThen szerkezetet alkotnának, ha azE1 ésE2 szaggatott élek nem szerepelnének.

Forward Copy transzformáció:

1 Forward copytranszformáció során az IfThen szerkezetet alkotó{B1,B2}részgráf közös pontjaB3 és azE2 él között található gráfot le kell másolni.

2 A(B2,B3)él végpontját a megismételt struktúraB‘3 pontjára állítani.

Az így kapott jobb oldali ábra{B3,B4}szerkezetére a forward copy transzformációt megismételve a gráf reducibilissé válik.

(22)

E'1 E2

E2 E1 E1

B'3

B'4

B'5

Exit Entry

B4

B5 B3

B2 B1

Exit Entry

B4

B5 B3

B2 B1

(23)

A következ ˝o ábrán található ciklus improper, mivel a belsejébe a B1 blokkokból azE1 élen keresztül be tudunk ugrani.

Backward Copy transzformáció:

1 A ciklust alkotó blokkokat meg kell ismételni (backward copy).

Ezzel megszüntethetjük a ciklus belsejébe történ ˝o ugrást.

2 AC1 élet a megismételt ciklusra kell állítani.

A struktúra továbbra is irreducibilis maradt, mivel a{B1,B2,B3}

IfThen szerkezetnek két kilépési pontja van, de ezt már az el ˝obb ismertetett forward copy transzformációval megszüntethetjük.

(24)

C'1 C1

C1

B'2 B2

E1

Exit Entry

B4

B5 B3 B1

B'5 B'3

B'4 B2

E1

Exit Entry

B4

B5 B3 B1

(25)

A következ ˝o ábrán a ciklus belsejéb ˝ol azE1 és azE2 éleken keresztül is kiléphetünk, tehát ciklust több kilépési ponttal is rendelkezik.

1 Ciklus végét és a kilépés okát tartalmazó változók bevezetése.

2 "compare cycle"blokk bevezetése. A ciklus szervezését erre kell építeni.

3 "compare from"blokk bevezetése. Kilépés okának megfelel ˝o folytatás elkészítése.

(26)

from==B5

from==B4 B6

compare from

B6 cycle==false

cycle:=false from:=B5 cycle:=true

from:=B5 B5 cycle==true

cycle:=false from:=b4

cycle==false

E2

B2

E1

Exit Entry

B4

compare cycle B3 B1

cycle==true

B2

E1

Exit Entry

B5 B4 B3 B1

(27)

improper — keresztél — irreducibilis — nem struktúrált Dahl – Dijkstra – Hoare , Strukturált programozás 7.

fejezet, A programok megértésér ˝ol

www.hit.bme.hu/~izso/struct_prog.pdf Donald E. Knuth, Stuctured Programming with goto Statesments

Linux: Using goto In Kernel Code

C-ben a break, continue valóban megsérti a strukturált programozás elvét, avagy irreducibilis lesz a CFG (vezérlésfolyan gráf) ?

(28)

Intel x86 processzor utasításkészlete kevés regisztert tartalmaz;

néhány regiszter használata korlátozott;

a gyors futás érdekében az adatokat érdemes a regiszterben tartani;

ha nincs elég regiszter, ki kell menteni a memóriába;

minimalizálni kell az egyidej ˝uleg használt regiszterek számát;

általában színezési problémára vezethet ˝o vissza.

(29)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

(30)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

(31)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

(32)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

(33)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

(34)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

(35)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

(36)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

s1

s2

s3

s4

s6

s5

(37)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

s1

s2

s3

s4

s6

s5

(38)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

s1

s2

s3

s4

s6

s5

(39)

s1 = 2 s2 = 4 s3 = s1 + s2 s4 = s3 + 1 s5 = s1 * s2 s6 = s4 * s5

s1 s2 s3 s4 s5 s6

s1

s2

s3

s4

s6

s5

(40)

aritmetikai egyszer ˝usítés:x = 4 * a;x = a « 2;

konstans kifejezés kiértékelése:4 * 10244096

(41)

megjegyzések elvesznek;

szimbólikus nevek elvesznek;

adattípusok elvesznek;

ciklus átrendezés, és kifejtés (unrolling);

különböz ˝o lokális változók azonos regiszterekben cserélik egymást ;

algebrai átírás;

kódmozgás;

(42)

Section 1

Intel mikroprocesszor története

(43)

1978-ban dobták piacra a 8086, 8088, 80186 processzorokat;

16-bites regiszterek;

szegmens-offset címzés;

szegmens regiszter állítás nélkül 64Kbyte címezhet ˝o;

néggyel eltolt szegmensregiszter + a 16 bit offset 20 bites címet alkot;

8087 lebeg ˝opontos koprocesszor.

(44)

1982-ben vezették be;

protected mód;

24-bit címsín;

16Mbyte memória címezhet ˝o.

(45)

1985-ben vezették be;

32 bites regiszterek;

32 bites cím, 4 GByte címezhet ˝o;

lapozást támogatja;

szegmens kezelés kikerülhet ˝o, flat memóriamodell;

linux futtatható rajta.

(46)

1989-ben vezették be;

DX verzióba beintegrálták a lebeg ˝opontos koprocesszort;

gyorsítótár (cache) alkalmazása;

pipeline utasítás feldolgozás;

(47)

1993-ben vezették be;

gyorsítótár méretét megduplázták, felét a kód felét az adatok számára használták;

két pipeline utasításfeldolgozó egység;

feltételes ugrásokra elágazásbecslést alkalmaztak két processzoros mód támogatása

MMX utasításkészlet

(48)

1995-1999 között jelent meg a Pentium 6,

gyártástechnológia fejl ˝odik, gyorsabb az el ˝odöknél;

2000-2006 NetBurst mikroarchitectura, SSE3 utasítások;

2003 Pentium-M kis fogyasztás;

2004 64 bites processzor 40 bites fizikai cím 1 Tbyte címezhet ˝o, 8-ról 16-ra növelték az általános célú regiszterek számát;

2005-2007 két mag, 64 bit ; stb.

(49)

Section 2

Utasításkészlet

(50)

technológiából adódó kötöttségek (tranzisztorok száma);

chipek költsége;

fogyasztás;

utasításkészlet b ˝ovíthet ˝osége;

el ˝oz ˝o sorozat kompatibilitásának a felvállalása;

új utasítások és m ˝uködési elvek oktatása.

(51)

CISC Complex Instruction Set Computing utasítások hossza változik;

m ˝uvelet végzés regiszterek és memória között;

kevés számú regiszter.

RISC (Reduced Instruction Set Computing) utasítások hossza azonos;

m ˝uveletek végzés csak regiszterek között;

sok regiszter.

Intel 80x86 processzor

Utasításkészlete CISC tulajdonságot mutat.

Belül a CISC utasításokat egyszer ˝u mikróm ˝uveletekre bontja (µOp) és párhuzamosan képes ezeket

végrehajtani. (pl. Sandy Bridge Pipeline architektúra).

(52)

Section 3

Intel X86 utasításkészlet

(53)

8 darab 32 bites regiszter;

6 darab szegmens regiszter;

statusz regiszter EFLAGS utasításszámláló EIP

CS SS DS

ES

EIP EFLAGS

szegmens regiszterek

EAX EBX ECX EDX

FS GS EBP ESP ESI

32 bites általános célú regiszterek

EDI

Izsó Tamás Vezérlésfolyam gráf és X86 utasításkészlet / 28

(54)

Speciális de nem kizárólagos felhasználása a regisztereknek.

EAX akkumulátor regiszter, szorzáshoz osztáshoz;

ECX counter regiszter (ciklusszámlálásra);

ESP stack pointer;

ESI string m ˝uveletek esetén a forrás memóriaterületet indexeli;

EDI string m ˝uveletek esetén a cél memóriaterületet indexeli;

EBP bázis pointer a stack kezeléshez.

(55)

Instruction

prefix Opcode Modr/M SIB Displacement Immediate

Opcionálisan adható 4 csoportba sorolható prefix

M ˝uveleti kód 1-,2-,3 byte

1 byte, ha szüksé- ges

1 byte, ha szüksé- ges

Displacement (eltolás) 1-,2- ,4 byte

Immediate (közvetlen) adat 1-,2-,4 byte

Reg/

opcode

Mod R/M Scale Index Base

(56)

1 csoport lock vagy repeat prefix

F0H LOCK prefix multiprocesszoros környezetben az osztott memóriához kizárólagos hozzáférést biztosít.

F2H REPNE/REPNZ prefix, amely string vagy input/output utasításokhoz lehet használni.

F3H REP vagy REPE/REPZ prefix, amely string vagy input/output utasításokhoz lehet használni.

2 operandusok méretének az átdefiniálása

csoport 66H operandus méretének megváltoztatása, azaz a 16 és 32 bites operandusok között választhatunk.

csoport 67H cím méretének a megváltoztatása.

(57)

3 szegmens módosítás, amely ugró utasításokra nem érvényes

2EH CS 36H SS 3EH DS 26H ES 64H FS 65H GS

4 elágazásbecslés feltételes vezérlésátadó utasításokhoz 2EH valószín ˝uleg az ugrás nem fog végrehajtódni;

3EH valószín ˝uleg az ugrás be fog következni.

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

Melyiknek nagyobb az esélye: hogy a gráf fagráf, vagy hogy legfeljebb két éle van. Megoldás: 6 lehetséges él, 2^6 = 64 lehetséges gráf (ez

T h e three kinds of components of a biological membrane are (a) the core formed by phosphatides, sterols and other lipids, (b) macromolecules covering this double layer, (c)

The three major schemes for the lunar mission were the direct approach involving no rendezvous, rendezvous of two parts of the mission payload in Earth orbit, and use of a

(2) Elkészítjük a G ford gráfot, melyet úgy kapunk G-b ˝ol, hogy minden él irányítását megfordítjuk. (4) Ha mindkét bejárás során minden pontot bejártunk, akkor

Melyiknek nagyobb az esélye: hogy a gráf fagráf, vagy hogy legfeljebb két éle van. Megoldás: 6 lehetséges él, 2^6 = 64 lehetséges gráf (ez

Vagy egyszerűen, túl- erőben voltak, többen lehettek, mint azok heten, és arra ment a harc, hogy kifosszák őket, ami nyilván sikerült is nekik, mert különben jóval több

Mindkét elképzelés központi kérdése az volt, hogy mely jellemzők szükségesek a szöveg megértéséhez és előhívásához, illetve melyek integrálódnak az olvasás során

rendelet megfosztotta a munkáltatókat attól a lehetőségtől, hogy a szokásos munkavégzési hely szerinti bíróságok előtt pereljenek, továbbá lehetővé tette,