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

Post on 05-Apr-2015

110 views 1 download

transcript

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

Compilerbau und Reverse Engineering

Vorlesung im Wintersemester 2010/11

Prof. Albert Zündorf

Betreuer: Johannes Spohr, et. al.

Fachgebiet für Software Engineering

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 22.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.

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

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  

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

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

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

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

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

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

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

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

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

Homework #1

Write unit tests for parsing single digits addition of those digits and computing the correct result interpreting subtraction, multiplication, and division “Punkt vor Strich” parsing parentheses

Implement the parser/interpreter.

A GUI for the interpreter only if you like.

Zip jour eclipse project

Send via Email to: alexander.jahl@student.uni-kassel.deFachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University

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

Scanning

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

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

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

Code Generation

Registermaschinen

Maschinencode / Assembler

Stackmaschinen

BCEL

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

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

OPCodeDecoder

AdderAddierbefehl

1

1

0

0

&

=0

&

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

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

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

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

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

BCELifier

Beispiel in Java schreiben

Compilieren

mit BCELifier "Creator" Klasse generien

anschauen

Teststrategie

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

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

if

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

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

while

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

funcDecl

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

Scopes

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

Procedure Call Stack

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

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 ')'

Wortableitung

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 ')'

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

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 (rhs(rule))print rule / add AST node

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

Ablauf:

Stack Eingabe Ausgabe

E n + n * n $

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

Ablauf:

Stack Eingabe Ausgabe

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) …

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) = { }

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)

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) = { }

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 ::=

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

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

Compiler Compiler: XText

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

Model Driven XXX

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

catalog LightComponents

comp Switch sends On, Off receives On, Off

message On;

message Off;

message Dim;

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

Reverse Engineering

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

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

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

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