Compilation Certifi´ee - irit.frMartin.Strecker/Talks/seminaire_irit_2004_11_10.pdf5 Contenu 0. Motivation 1. Compilation v´erifi´ee • MicroJava: Typage, s´emantique • Compilation;
Post on 29-Nov-2018
227 Views
Preview:
Transcript
Compilation Certifiee
Martin Strecker
Equipe SVF
Seminaire IRIT 10.11.2004
1
Seminaire IRIT 10.11.2004
2
Seminaire IRIT 10.11.2004
3
Seminaire IRIT 10.11.2004
4
Comment eviter ces problemes ?
Souhaitable: Processus de developpement base sur
• Formalismes / langages avec semantique precise
• Mecanismes de verification / analyse statique
• Preservation des proprietes par compilation
• Formalisation et verification assistees par ordinateur
Etat actuel:
• pas encore pratique industrielle
• . . . mais postulat de normes de developpement:ISO 61508, DO-178B, Common Criteria . . .
Seminaire IRIT 10.11.2004
5
Contenu
0. Motivation
1. Compilation verifiee
• MicroJava: Typage, semantique• Compilation; Correction• Compilateur executable
2. Compilation avec certificats
• Java Bytecode: Typage• Certificats de type• Preservation des types
Seminaire IRIT 10.11.2004
6
1. Compilation verifiee
• Langage source: Typage, semantique
• Langage bytecode: Semantique
• Compilateur: Definition et correction
Seminaire IRIT 10.11.2004
7
Java & Co.
− threads− gestion mémoire− chaînes de caractères
+ transactions
+ firewalls
− interfaces
− tableaux
µJava
JavaCardJava
Desormais: Java := µJava
Seminaire IRIT 10.11.2004
8
Java: Termes
datatype expr = ...| NewC cname
| Cast cname expr
| vname ::= expr
| {cname} expr . vname ::= expr
| BinOp binop expr expr
| {cname} expr . mname {(ty) list} (expr) list
datatype stmt = ...| Expr expr
| If (expr) stmt Else stmt
| While (expr) stmt
Seminaire IRIT 10.11.2004
9
Java: Semantique (1)
Etat: σ = (xc, hp, lvars) avec:
• Exception (optionnelle): xc : xcpt option
• Memoire (heap) hp: loc ⇀ obj
• Variables locales lvars: vname ⇀ val
Seminaire IRIT 10.11.2004
10
Java: Semantique (2)
Semantique operationnelle: Evaluation de
• commandes: P ` (σ, c) −→S σ′
• expressions: P ` (σ, e) −→E (v, σ′)
=⇒ Semantique “a grands pas” (“naturelle”)
Regles:P ` (Norm s0, e) −→E (Bool True, σ1)
P ` (σ1, c1) −→S σ2
P ` (Norm s0, If( e ) c1 Else c2) −→S σ2
Seminaire IRIT 10.11.2004
11
Java: Typage
Regles de typage (relations inductives)
• pour expressions: E ` e :: T
• pour commandes: E ` s√
E ` e :: PrimT boolean E ` s1√
E ` s2√
E ` If( e ) s1 Else s2√
Seminaire IRIT 10.11.2004
12
1. Compilation verifiee
• Langage source: Typage, semantique
• Langage bytecode: Semantique
• Compilateur: Definition et correction
Seminaire IRIT 10.11.2004
13
Java Virtual Machine: Instructions
JVM: Machine a pile, operant sur bytecode.
Instructions:
datatype instr
= Load nat
| Store nat
| New cname
| Invoke cname mname (ty list)| Pop| Dup| ...
bytecode = instr list
Seminaire IRIT 10.11.2004
14
JVM: Semantique Operationnelle (1)
heapxcpt? frames opstack
locvars
cname
sig
pc
...
...
C
jvm state =xcpt option ×heap ×frame list
frame =opstack × locvars ×cname × sig × nat
Execution (un pas) ... par ex. Load:
exec_instr (Load idx) hp stk vars C sig pc frs =(None, hp, ((vars ! idx) # stk, vars, C, sig, pc+1)#frs)
Execution (rel. transitive) P `s -jvm→t
Seminaire IRIT 10.11.2004
15
JVM: Semantique Operationnelle (2)
42
Load 0 Getf n C Lit 7 Putf n C ...... Lit 4 Store 1Ifcmpeq 3
5
c 42 42
7
5
4
False
heap
byte−code
locvars
stackop−
c c c
a a
4
... ...
Seminaire IRIT 10.11.2004
16
1. Compilation verifiee
• Langage source: Typage, semantique
• Langage bytecode: Semantique
• Compilateur: Definition et correction
Seminaire IRIT 10.11.2004
17
Compilateur: Definition
compExpr :: java_mb ⇒ expr ⇒ instr listcompStmt :: java_mb ⇒ stmt ⇒ instr list
compExpr jmb (vn::=e) = compExpr jmb e @ [Dup, Store (index jmb vn)]
compExpr jmb ({cn}e1.mn {Ts}(ps)) =compExpr jmb e1 @ compExprs jmb ps @ [Invoke cn mn Ts]
compStmt jmb (c1;; c2) = (compStmt jmb c1) @ (compStmt jmb c2)
Seminaire IRIT 10.11.2004
18
Compilateur: Correction
Expressions:
E
(hp’, # os, lvars’, pc’) v
(xc, hp, lvars) e (xc’, hp’, lvars’)v
(hp, os, lvars, pc)
= =?
exec_all
... ...compExpr e
Commandes: Pareil
Seminaire IRIT 10.11.2004
19
Compilateur: Preuve
Idee: Induction sur relation d’execution du langage source
...
...Invariants:
• Programme source bien type
• Programme source bien forme (relation de sous-typage acyclique, . . .)
• Typage dynamique du heap consistent avec typage statique(; type soundness)
Seminaire IRIT 10.11.2004
20
Extraction d’un Compilateur Executable
*.classprint jasmin
*.java
compilewelltyped
parse
correctioncompilateur
Compiler.thy
*.jcompiletypecheck
Compiler.ML
Typing.thy
extraction
Isab
elle
ML
sém. opér.
Java
sém. opér.
Bytecode
Seminaire IRIT 10.11.2004
21
2. Compilation avec certificats
• Bytecode: Typage
• Compilation de types
Seminaire IRIT 10.11.2004
22
Bytecode: Typage – Introduction
But: Analyse statique du bytecode pour prevenir:
• manipulation illicite de pointeurs (“pointer forging”)
• overflow de la pile des operandes
• sauts dehors la liste d’instructions
Procedure (verification du bytecode)
1. Inference de type du bytecode
2. Verification du type infere
Seminaire IRIT 10.11.2004
23
Bytecode: Typage – Description
C
A
C
A Int
CC
A
Load 0 Getf n C Lit 7 ...Ifcmpeq 3
C Int Int
Int
byte−code
Stack
...Store 1Lit 4
Bool
...
IntOp.
Types
LocalVar.Types
Bytecode bc est bien type par rapport a type BT si pour tout pc < length bc:
• app (bc!i) (BT!i)
• eff (bc!i) (BT!i) est “sous-type” de tous les types successeurs de bc!i
app (Store idx, (ts#ST, LT)) = (idx < length LT)
eff (Store idx, (ts#ST, LT)) = (ST, LT[idx:= OK ts])
Seminaire IRIT 10.11.2004
24
Bytecode: Inference de Types
Idee: Reiterer eff jusqu’a atteindre un point fixe
AB
B B B
A A A
New B Store 0 Load 1 Goto
AA
B A A
A A A
Seminaire IRIT 10.11.2004
25
2. Compilation avec certificats
• Bytecode: Typage
• Compilation de types
Seminaire IRIT 10.11.2004
26
Compilation avec Certificats
Bytecode Certificat=?=
Vérificationde types
compTpcomp
Compression
ProgrammeSource
• Compilateur de types pareil a uncompilateur de termes
• Technique appropriee pour cartesa puces, tel. cellulaires etc.
Seminaire IRIT 10.11.2004
27
Semantiquement correct, mais mal type ?
Exemple 1 (hypothetique)
Goto ... Goto
AA
B B
... Return
B B
...
Exemple 2 (empirique [Stark et al])Probleme fondamental: Traduction de try-finally; Langage source et cible ont des systemes de typage incompatibles
Seminaire IRIT 10.11.2004
28
Traduction de Types
compTpExpr :: java_mb ⇒ java_mb prog ⇒ expr ⇒state_type ⇒ method_type × state_type"
compTpExpr jmb P (BinOp Eq e1 e2) =
(compTpExpr jmb P e1) 2 (compTpExpr jmb P e2) 2
popST 2 2 pushST [PrimT Boolean] 2 popST 1 2 pushST [PrimT Boolean]
Comparer avec:
compExpr jmb (BinOp Eq e1 e2) =
(compExpr jmb e1) @ (compExpr jmb e2) @[Ifcmpeq 3, LitPush(Bool False), Goto 2, LitPush(Bool True)]
Seminaire IRIT 10.11.2004
29
Correction
Theoreme:
wf_java_prog P =⇒ wt_jvm_prog (comp P) (compTp P)
Seminaire IRIT 10.11.2004
30
3. Resume et Perspectives
Seminaire IRIT 10.11.2004
31
Resume
Verification de compilateur; preservation de semantique
Compilateur a certificats; verification de proprietes specifiques
Verification de la generation de certificats; adequation de differents mecanismes d’analyse
Seminaire IRIT 10.11.2004
32
Perspectives
Compilateur preservant proprietes non-fonctionnelles
• . . . temporelles
• . . . de memoire
Transformation et raffinement de modeles
• . . . par exemple AADL
Seminaire IRIT 10.11.2004
top related