fachgebiet software engineering Übersicht © 23.01.2014 albert zündorf, kassel university...

38
Fachgebiet Software Engineering Übersicht © 26.06.22 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering Vorlesung im Wintersemester 2008/09 Prof. Albert Zündorf Betreuer: Johannes Spohr , et. al. Fachgebiet für Software Engineering

Upload: gertrud-weninger

Post on 05-Apr-2015

110 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Compilerbau und Reverse Engineering

Vorlesung im Wintersemester 2008/09

Prof. Albert Zündorf

Betreuer: Johannes Spohr, et. al.

Fachgebiet für Software Engineering

Page 2: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Organisatorisches

Umfang: 4 SWS teils Vorlesungen teils Übungen

Übungsbetreuung: Johannes Spohr

Ort und Zeit: Freitag 10:15 - 11:45 Raum 1340

Beginn: Freitag, den 16.10.2009

Prüfung:

• Projektarbeit / Hausaufgaben

• jeder einzeln

• wird nur einmal im Jahr angeboten

Folienskript, Unterlagen, Aufgabenstellungen:

• http://seblog.cs.uni-kassel.de/

• meist einen Tag in voraus.

Page 3: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Inhalte und Lernziele:

Lesen und Verarbeiten strukturierter Texte

Daten

Programme

Rekursiverabstiegscompiler

Compilercompiler

Codegenerierung

Codecompletion

Codeanalyse

Refactorings

Page 4: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Literatur

http://compilers.iecc.com/crenshaw/

Compilerbau, 2 Tle., Tl.1 von Alfred V. Aho, Ravi Sethi, und Jeffrey D. Ullman von Oldenbourg (Taschenbuch - Dezember 1999)Preis:EUR 34,80  

Page 5: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 6: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Scanning

Page 7: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Scanning

Page 8: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 9: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Code Generation

Registermaschinen

Maschinencode / Assembler

Stackmaschinen

BCEL

Page 10: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Registermaschinen

ALUOPCodeDecoder

Adder Multiplier

LogicOps StoreOps

JumpOps

PC

ACU

FP

R1 ..8

Memory

01001110010001010100010000101

AddressDecoder

Page 11: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

OPCodeDecoder

AdderAddierbefehl

1

1

0

0

&

=0

&

Page 12: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Maschinencode Registermaschine

Arithmetisch, Logisch, Speicher, Sprung, …

OpCode plus 1 oder 2 Operanden

Rechenbefehle nur auf Registern

Speicherbefehle: Memory Register

Page 13: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Stackmaschinen

ALUOPCodeDecoder

Adder Multiplier

LogicOps StoreOps

JumpOps

PC

ACU

FP

R1 ..8

Memory

01001110010001010100010000101

AddressDecoder

Stack

Page 14: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Maschinencode Stackmaschine

Arithmetisch, Logisch, Speicher, Sprung, …

OpCode plus 1 oder 2 Operanden

Rechenbefehle auf Stack

Speicherbefehle: Memory Stack

load 0, load 8, add, store 12

Page 15: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Java Byte Code für eine Klassehttp://jakarta.apache.org/bcel/manual.html

Page 16: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

BCELifier

Beispiel in Java schreiben

Compilieren

mit BCELifier "Creator" Klasse generien

anschauen

Page 17: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

if

Page 18: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 19: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

while

Page 20: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

funcDecl

Page 21: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Scopes

Page 22: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Procedure Call Stack

Page 23: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 24: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Tabellengesteuertes Parsen

Beispielgrammatik:

E ::= T ['+' T]* E ::= T E' E' ::= + T E' |

T ::= F ['*' F]* T ::= F T' T' ::= * F T' |

F ::= n | '(' E ')' F ::= n | '(' E ')'

Page 25: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Parsertabelle

+ * ( ) n $

E E::=TE' E::=TE'

E' E'::=+TE' E'::= E'::=

T T::=FT' T::=FT'

T' T'::= T'::=*FT' T'::= T'::=

F F::=(E) F::=n

Page 26: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Algorithmus

while Stack nicht leer

if top == currentToken

pop nextToken()

else

rule := M[top, currentToken]poppush (lhs(rule))print rule

Page 27: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Ablauf:

Stack Eingabe Ausgabe

$ n + n * n $

Page 28: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Ablauf:

Stack Eingabe Ausgabe

Page 29: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Konstruktion: First und Follow

First () Menge aller Terminale mit denen beginnen kann

First (a) {a}

X ::= First ( X ) +=

X ::= A B C D First ( X ) += First ( A ) if ( First (A) ) First ( X ) += First (B) …

Page 30: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Konstruktion: First und Follow

E ::= T E' First (E) = { }

E' ::= + T E' | First (E') = { }

T ::= F T' First (T) = { }

T' ::= * F T' | First (T') = { }

F ::= n | '(' E ')' First (F) = { }

Page 31: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Konstruktion: First und Follow

Follow (X) alle Terminale die auf X folgen können

S Follow (S) += $

A ::= B Follow (B) += First () - if ( First () ) Follow (B) += Follow (A)

A ::= B Follow (B) += Follow (A)

Page 32: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Konstruktion: First und Follow

E ::= T E' Follow (E) = { }

E' ::= + T E' | Follow (E') = { }

T ::= F T' Follow (T) = { }

T' ::= * F T' | Follow (T') = { }

F ::= n | '(' E ')' Follow (F) = { }

Page 33: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Tabellenkonstruktion

for_all A ::=

for_all a First ()

M[A,a] += A ::=

if First ()

for_all b Follow (A)

M[A,b] += A ::=

if $ Follow (A)

M[A,$] += A ::=

Page 34: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Tabellenkonstruktion

E ::= T E'

E' ::= + T E' |

T ::= F T'

T' ::= * F T' |

F ::= n | '(' E ')'

+ * ( ) n $

E

E'

T

T'

F

Page 35: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Compiler Compiler: Antlr V3

Page 36: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Model Driven XXX

Page 37: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

Page 38: Fachgebiet Software Engineering Übersicht © 23.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester

Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University