+ All Categories
Home > Documents > Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot...

Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot...

Date post: 27-May-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
28
Program Analysis Frameworks Dr. Jeff Huang Fall 2014
Transcript
Page 1: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Program  Analysis  Frameworks  

Dr.  Jeff  Huang  Fall  2014  

Page 2: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

C/C++  Program  Workflow  

Page 3: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Java  Program  Workflow  

Page 4: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Tools  •  Compiler  frameworks  

–  GCC,  Clang,  LLVM,Javac    •  StaMc  Analysis  &  InstrumentaMon  

–  Soot,  WALA,  LLVM  •  Dynamic  Analysis  

–  PIN,  Valgrind,  ASM  •  Symbolic  ExecuMon  

–  KLEE,  JPF,  CATG  •  Model  checking  

–  JPF  •  Language:  

–  Java:  Soot,  WALA,  JPF,  ASM,  CATG  –  C/C++:  LLVM,  KLEE,  PIN,  Valgrind  –  Android:  Soot  –  JavaScript:  WALA  

Page 5: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Soot  Workflow  

Page 6: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Soot  •  Control  flow  graph,  dataflow  analysis,  pointer  analysis,  call  graph  

•  …  •  Eclipse  plugin  

•  Extending  Soot  with  your  own  analysis  –  Android  taint  analysis  –  Null  pointer  analysis,  array  bound  analysis  –  Data  race  detecMon  –  Slicing,  Profiling  –  …  

Page 7: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Jimple  

•  A  typed  3-­‐address  intermediate  representaMon    public  staMc  void  main(String[]  args){  

   System.out.println("Hello  World");  }  

 public  staMc  void  main(java.lang.String[])          {                  java.lang.String[]  args;                  java.io.PrintStream  temp$0;                    args  :=  @parameter0:  java.lang.String[];                  temp$0  =  <java.lang.System:  java.io.PrintStream  out>;                  virtualinvoke  temp$0.<java.io.PrintStream:  void  println(java.lang.String)>("Hello  World");                  return;          }  

Page 8: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Extending  Soot  

•  Implement  a  BodyTransformer  or  a  SceneTransformer  –  internalTransform  method  does  the  transformaMon  

•  Choose  a  pack  for  your  transformaMon  –  Intraprocedural:  jtp  –  Interprocedural:  wjtp  

•  Write  a  main  method  that  adds  the  transform  to  the  pack,  then  runs  Soot’s  main  

Page 9: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Soot  

•  Soot  main  page:  – hlp://www.sable.mcgill.ca/soot/  

•  Soot  download  page:  – hlp://www.sable.mcgill.ca/soot/soot_download.html  

•  Soot  tutorials:  – hlp://www.sable.mcgill.ca/soot/tutorial/  

Page 10: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

WALA  •  Provides  staMc  analysis  libraries  –  Pointer  analysis,  call  graph,  interprocedural  data-­‐flow  analysis,  context-­‐sensiMve  slicing  

•  Limited  code  transformaMon  – WALA  IR  (SSA-­‐based)  is  immutable  –  Support  bytecode  instrumentaMon  via  Shrike    –  RecommendaMon:  use  WALA  for  compuMng  analysis  results,  do  transformaMon  separately    

•  For  JavaScript  analysis  –  hlp://wala.sourceforge.net/files/WALAJavaScriptTutorial.pdf  

Page 11: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

WALA  

Build  CallGraph  for  HTML    

Page 12: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Java  PathFinder  (JPF)  •  An  explicit  state  model  checker  –  Focus  is  on  finding  bugs  in  Java  programs  –  The  models  are  Java  programs  –  The  properMes  can  be  asserMons,  gov.nasa.jpf.Property  objects,  or  JPF  listener  objects  

•  A  framework  for  runMme  Java  verificaMon  – Model  checking    –  Symbolic  execuMon  –  UML  state  chart  modeling  –  Numeric  VerificaMon  (int  overflow,  fp  over/underflow,  …)  –  …  

Page 13: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Java  PathFinder  (JPF)  

Page 14: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Java  PathFinder  (JPF)  

Page 15: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Java  PathFinder  (JPF)  

•  Pure  Java  up  to  ??-­‐KLOC  –  Depends  on  logical  complexity  and  state  size,  not  KLOC.  –  Programs  with  100K+  lines  have  been  analyzed  

•  MulM-­‐threaded  code  (Of  Course!)  •  Symbolic  execuMon  (Symbolic  PathFinder)  

•  Building  properMes:  deadlocks,  race  condiMons,  unhandled  excepMons,  applicaMon-­‐specific  asserMons,  ...  

•  Custom:  implement  your  own  using  JPF’s  extension  

Page 16: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

NaMve  Methods  •   JPF  supports  all  bytecode  instrucMons  –  Custom  implementaMon:  for  tracking  state  changes  caused  by  their  execuMon  

•  Problem:  naMve  methods  (JNI)  –  State  changes  cannot  be  tracked  by  JPF  – Hence,  No  libraries  with  unsupported  naMve  calls    –  Relevant  features:  file  I/O,  GUI,  networking,  …  

•  Remedy  opMons  –  Custom  implementaMon  in  Java    model  classes  – DelegaMon  to  host  JVM  via  the  Model-­‐Java  Interface  

Page 17: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Using  JPF    

•  h?p://babelfish.arc.nasa.gov/trac/jpf/wiki  •  Google  “A  Hands-­‐On  Java  PathFinder  Tutorial”  

Page 18: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

LLVM  

•  A  compiler  framework  with  collecMon  of  reusable  components  and  tools  – C/C++/ObjecMve-­‐C/C++  …  -­‐>  LLVM  IR  -­‐>  (OpMmizer)-­‐>  LLVM  IR  -­‐>  naMve  code  (X86,ARM,  PPC,  etc.)  

Page 19: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

LLVM  •  LLVM  tutorial  

–  hlp://pllab.cs.nthu.edu.tw/cs340402/lectures/lectures_2013/LLVM%20Bitcode%20IntroducMon.pdf  

•  Clang:    a  frontend  for  C  language  family  –  “clang  -­‐emit-­‐llvm  -­‐c  hello.cpp  -­‐o  hello.bc”  

•  llvm-­‐gcc/g++:  LLVM  C/C++  frontend  –  “llvm-­‐g++  -­‐-­‐emit-­‐llvm  –c  hello.cpp  –o  hello.bc”  

•  llvm-­‐dis:  disassemble  a  bitcode  file  into  a  human-­‐readable  .ll  file    –  “llvm-­‐dis  hello.bc”  

•  opt:  analyze  and  transform  LLVM  bitcode  –  “opt  –O1  –o  hello.bc  hello2.bc”  

•  llc:  code  generator  from  bitcode  to  architecture-­‐specific  assembly  code  –  “llc  hello2.bc  –o  hello2.s”  –  “llvm-­‐gcc  hello2.s  –o  hello”  

Page 20: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Program  Analysis  with  LLVM  •  Write  your  own  pass  –  hlp://llvm.org/docs/WriMngAnLLVMPass.html  

–  “opt  –load  yourpass  yourcommand  hello.bc  –o  hello2.bc”  

Page 21: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

KLEE  

•  A  symbolic  execuMon  tool  built  upon  LLVM  (2.9)  •  Find  memory  errors  and  division  by  zero  defects  •  Generate  test  cases  to  trigger  the  error  

Page 22: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

KLEE  

•  Mark  your  variable  symbolic  

•  Run  “klee  hello.bc”  

•  Hack  KLEE  to  implement  your  own  symbolic  analysis!  – klee.llvm.org  

Page 23: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

PIN  

•  Dynamic  binary  instrumentaMon  –  Instruments  executables  directly  – No  need  to  recompile  or  relink    – Handle  dynamically-­‐generated  code    – Alach  to  running  processes    

•  AcMvely  developed  at  Intel  •  Large  user  base  in  academia  and  industry  

Page 24: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Using  PIN  

•  Official  user’s  manual  –  hlps://so}ware.intel.com/sites/landingpage/pintool/docs/67254/Pin/html/  

•  PIN  tutorial  –  hlp://www.cs.du.edu/~dconnors/courses/comp3361/notes/PinTutorial.pdf  

Page 25: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Valgrind  

•  Another  popular  dynamic  binary  instrumentaMon  framework    – hlp://valgrind.org/  

•  Open  source  •  Easy  to  execute,  e.g.:  – valgrind  -­‐-­‐tool=memcheck  ls  

•  Overhead  is  the  problem  – 5-­‐10X  slowdown  without  any  instrumentaMon  

Page 26: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

Valgrind  Tools  

•  MemCheck  –  check  memory  errors  – hlp://pages.cs.wisc.edu/~bart/537/valgrind.html  

•  Cachegrind  –  profile  cache  misses  •  Callgrind  –  profile  callgraphs  •  Massif  –  profile  heap  (usage  overMme)  •  Helgrind/DRD  –  detect  data  races  

hlp://www.valgrind.org/info/tools.html    

Page 27: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

WriMng  a  New  Valgrind  Tool  

•  Use  a  template  –  The  tool  lackey  is  good  candidate  –  Two  parts  to  fill  in  

•  Instrumenter  •  RunMme  

•  Instrumenter  –  IniMalizaMon  –  InstrumentaMon  –  FinalizaMon  –  System  calls  intercepMon  

•  RunMme  –  Transfer  funcMons  – Memory  management  for  abstract  state  

hlp://www.valgrind.org/docs/manual/wriMng-­‐tools.html    

Page 28: Program’Analysis’Frameworks’jeff/course/689_fall2014/... · 2014-09-11 · Extending’Soot • Implementa BodyTransformer’or’a SceneTransformer’ – internalTransform’method’does’the’

ASM  •  Dynamic  instrumentaMon  for  Java  – Modify  exisMng  classes  or  dynamically  generate  classes  

•  “All  purpose  bytecode  manipulaMon  and  analysis  framework”  

•  hlp://asm.ow2.org  

•  Basic  process  –  Construct  ClassFileTransformer,  ClassWriter  –  Stack  up  the  visitors  for  classes,  methods,  fields,  annotaMons,  etc.  

– Add  “–javaagent”  to  hook  into  class  loading  process  


Recommended