fundamentos de análise estática
DESCRIPTION
Fundamentos de Análise Estática. O que é?. Análise automática feita em código sem execução. Objetivo (Para que serve?). Verificação de propriedades Entendimento de código. Foco desta aula. Objetivo (Para que serve?). Verificação de propriedades Entendimento de código. Foco desta aula. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/1.jpg)
Fundamentos de Análise Estática
![Page 2: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/2.jpg)
O que é?
• Análise automática feita em código sem execução
![Page 3: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/3.jpg)
Objetivo (Para que serve?)
• Verificação de propriedades• Entendimento de código Foco desta aula
![Page 4: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/4.jpg)
Objetivo (Para que serve?)
• Verificação de propriedades• Entendimento de código Foco desta aula
Entendimento de código pode facilitar verificação!
![Page 5: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/5.jpg)
Várias formas (Como?)
• Sistemas de tipos• Verificação de restrições• Análise de dataflow Foco desta aula
![Page 6: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/6.jpg)
Conceitos Básicos
![Page 7: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/7.jpg)
Aproximação de soluções
• Propriedades complexas– Análise é indecidível ou alto custo
![Page 8: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/8.jpg)
Aproximação de soluções
• Propriedades complexas– Análise é indecidível ou alto custo
Maioria das propriedades interessantes são complexas!
![Page 9: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/9.jpg)
Aproximação de soluções
• Propriedades complexas– Análise é indecidível ou alto custo
• Abordagem: aproximar espaço de solução– super-aproximação: falso positivos– sub-aproximação: falso negativos
comum
![Page 10: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/10.jpg)
Aproximação de soluções
• Propriedades complexas– Análise é indecidível ou alto custo
• Abordagem: aproximar espaço de solução– super-aproximação: falso positivos– sub-aproximação: falso negativos
• Prática: – Balanço entre falso positivos e negativos e
escalabilidade potencializa utilidade da análise
comum
Uma análise é conservadora quando resultado inclui necessariamente todas as soluções. Por exemplo, uma análise para encontrar erros de tipo é conservadora quando não permite escapar nenhum erro. Por outro lado, geralmente, reporta erros espúrios (i.e., alarmes falso).
![Page 11: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/11.jpg)
Frequentemente balanço entre falso positivos, negativos, e escalabilidade é mais importante (i.e., útil) que garantias fortes de correção (0% falso negativos) e completude (0% falso positivos).
![Page 12: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/12.jpg)
Um pouco de teoria...
![Page 13: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/13.jpg)
Teoria dos Reticulados (Lattice)
• O que estes grafos tem em comum?– Obs. vértice denota relação de ordem
![Page 14: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/14.jpg)
Ordem Parcial
• Ordem parcial é uma relação binária:– reflexiva, transitiva e anti-simétrica
• Conceitos associados– Upper Bound– Least Upper Bound (LUB)– Lower Bound– Greatest Lower Bound (GLB)
![Page 15: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/15.jpg)
LUB
LUB para este subconjunto?
![Page 16: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/16.jpg)
LUB
LUB para este subconjunto?
![Page 17: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/17.jpg)
GLB
GLB para este subconjunto?
![Page 18: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/18.jpg)
GLB
GLB para este subconjunto?
![Page 19: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/19.jpg)
Top e Bottom
Bottom
Top
![Page 20: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/20.jpg)
Lattice
• Reticulado– Ordem parcial onde qualquer subconjunto de
elementos da relação possui LUB e GLB associado
• Esta ordem parcial é um lattice?
![Page 21: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/21.jpg)
Exemplos: Lattices
![Page 22: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/22.jpg)
Exemplo: relação de inclusão de inteiros {0,1,2,3}
![Page 23: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/23.jpg)
Função monotônica e Ponto Fixo
• Função f: L → L– Monotônica
• Não decresce. Conceitualmente, acumula informação
![Page 24: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/24.jpg)
• Função f: L → L– Monotônica
• Não decresce. Conceitualmente, acumula informação
• Ponto fixo fix(f), f(fix(f)) = fix(f)• Teorema do ponto fixo (Tarski):
– Toda função monotônica f admite ponto fixo em um reticulado L de altura finita.
Função monotônica e Ponto Fixo
![Page 25: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/25.jpg)
Ilustração
• Iterações sucessivas de uma função– Acumula informação
(f é monotônica)– Para em ponto fixo quando
“não há mais informação para se descobrir”
![Page 26: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/26.jpg)
Relação com nosso problemaO domínio e contra-domínio de f representam alguma informação de nosso interesse no programa. Por exemplo, definições alcançáveis em um ponto do programa. Tipicamente, f opera em uma representação abstrata do programa. Por exemplo, o control-flow graph (CFG) ou o inter. flow graph (IFG). Uma iteração de f propaga informação nesta estrututura. Por exemplo, propaga informação armazenada nos nós pelos vértices de um CFG.
![Page 27: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/27.jpg)
Um pouco de prática...
![Page 28: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/28.jpg)
Perspectiva
• Análise estática propaga informação usando estrutura do programa– Intra-procedural: fluxo de controle de um
método/função (CFG)– Inter-procedural: fluxo de chamadas entre
métodos/funções (IFG)
![Page 29: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/29.jpg)
Perspectiva
• Análise estática propaga informação usando estrutura do programa– Intra-procedural: fluxo de controle de um
método/função (CFG)– Inter-procedural: fluxo de chamadas entre
métodos/funções (IFG)
![Page 30: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/30.jpg)
CFG
![Page 31: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/31.jpg)
Quiz
• Quais as definições de f alcançáveis no nó return f? (assuma que uma def. consiste de um nome de variável + id. do bloco básico)
![Page 32: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/32.jpg)
Como mecanizar análise mental?
• Associado a cada nó i:– Informação acumulada: xi
• No exemplo anterior xi armazena conjunto de definições
– Função (monotônica) de transferência: Fi
![Page 33: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/33.jpg)
Chaotic IterationSimplificação: na prática, Fi lê apenas conteúdo em nós vizinhos a i!
![Page 34: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/34.jpg)
Framework
• Em geral, 4 funções descrevem uma análise intra-procedural: in, out, kill e gen
• Ilustração
in
out
genkill
![Page 35: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/35.jpg)
Exemplo: Reachable Definitions
• in[b] = U OUT[k], for all k ∈ pred[b]• out[b] = (IN[b] – kill[b]) + gen[b]• kill[b] = “definições mortas em b”• gen[b] = “novas definições (não mortas) em b”
![Page 36: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/36.jpg)
Existem vários frameworks de análise que permitem escrever basicamente estas 4 funções e obter sua análise intra-proc. E.g., SOOT (http://www.sable.mcgill.ca/soot)
![Page 37: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/37.jpg)
Outros Detalhes
• Generalização– May/Must– Forward/Backward
• Reachable Defintions é uma análise– May e Forward
![Page 38: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/38.jpg)
Perspectiva
• Análise estática propaga informação usando estrutura do programa– Intra-procedural: fluxo de controle de um
método/função (CFG)– Inter-procedural: fluxo de chamadas entre
métodos/funções (IFG)
![Page 39: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/39.jpg)
Similaridades entre Inter e Intra• Informação se propaga em um grafo
– Informação e função de transferência associada a cada nó
Grafo inclui informação de chamador e chamado
![Page 40: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/40.jpg)
Diferenças
• Representação do grafo é diferente• Context insensitivity: alguns caminhos (de
chamadas) são explorados, mas não são possíveis!
g()
f() calls g()
returns from g() back to f() returns from g() back to h()
h() calls g()
Caixinha é um CFG
![Page 41: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/41.jpg)
Diferenças
• Representação do grafo é diferente• Context insensitivity: alguns caminhos (de
chamadas) são explorados, mas não são possíveis!
g()
f() calls g()
returns from g() back to f() returns from g() back to h()
h() calls g()
propagada informação acumulada no contexto de chamada de h() para o retorno da chamada de g() em f()!
![Page 42: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/42.jpg)
Inlining
• Uma tentativa é representar um CFG do programa fazendo inlining de função
• Problemas– Como tratar recursão?– Não escala (vários contextos de chamada)
![Page 43: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/43.jpg)
Existe uma variedade de representações de interprocedural flow graphs (IFGs). Por exemplo, IFG proposto por Harrold e Soffa em “Efficient Computation of Interprocedural Definition-Use Chains”, TOPLAS 1994.
![Page 44: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/44.jpg)
Considerações Finais
• Representação do programa pode facilitar muito a análise do programa– 3-address– SSA
O framework SOOT oferece 4 representações (formatos) do programa de entrada.
![Page 45: Fundamentos de Análise Estática](https://reader034.vdocuments.mx/reader034/viewer/2022051402/56815cf5550346895dcaf7cf/html5/thumbnails/45.jpg)
Leitura adicional
• Michael Shwartzbach’s Lecture Notes on Static Analysis: http://www.brics.dk/~mis/static.pdf