Post on 24-Feb-2016
description
Paradyn Project
Paradyn / Dyninst WeekMadison, Wisconsin
May 2-4, 2011
Paradyn Project
Deconstruction of Dyninst:Best Practices and Lessons Learned
Bill Williams
What is Componentization?
Software ProjectPublic Interface
Neat Idea
Deconstruction of Dyninst 2
Software ProjectNeat Idea
What is Componentization?
Public Interface
Component
Public Interface
Component
Deconstruction of Dyninst 3
Why Components?• Expose existing functionality• Build new tools easily• Orthogonality• Testability• Improved code quality
Deconstruction of Dyninst 4
Dyninst and the Components
AST
Binary
Process
StackwalkerAPI
Patch API
SymtabAPI
DataFlowAPI
InstructionAPI
ParseAPI
CodeGen
ProcControlAPI
Binary
= Existing Component = New Component
= Proposed
DyninstAPI
ParseAPI: Defining the component
BlockEdge
Function
Cached register liveness
info
Instrumentability
InstPoints
Dyninst CFG model
Deconstruction of Dyninst 6
ParseAPI: Defining the component
Block
Edge
Function
Cached register liveness
info
Instrumentability
InstPoints
Dyninst extensionsParseAPI CFG model
Deconstruction of Dyninst 7
PatchAPI: Refine your assumptions
Deconstruction of Dyninst 8
PatchAPI
Dyninst
Paradyn
SymtabAPI: Creating good abstractions
…hiding messy internals
Great interface…
Deconstruction of Dyninst 9
ELF PE
XCOFF
InstructionAPI: Adding missing features
Old: Control flow and not much else
Deconstruction of Dyninst 10
InstructionAPI: Adding missing features
New: control flow and data flow
Deconstruction of Dyninst 11
ProcControlAPI: Build one to throw away
Too many features, and I don’t need all of them!
Deconstruction of Dyninst 12
ProcControlAPI: Build one to throw awayAh, something that just does what I need!
Deconstruction of Dyninst 13
Stackwalker: When customers attackDyninst requirements
Call Stack
Frame type•Normal•Optimized•Signal handler
•Instrumentation
Location• 3rd
party
Platform• Linux• Windows• Solaris• AIX
Call Stack
Frame type• Normal• Optimized• Signal
handler
Location• 1st party• 3rd party
Platform• Linux• BlueGen
e
STAT requirements
Deconstruction of Dyninst 14
DataflowAPI: Cool isn’t enoughCustomers: the difference between a module and a component
Deconstruction of Dyninst 15
What we’ve learned• Internal and external users driving
interface design
• Test new interfaces
• Change code incrementally
• Keep your project’s details where they belong
Deconstruction of Dyninst 16
Componentization Tradeoffs• Stability vs. improvement• Internal requirements vs. external
requirements• Development time vs. scope• Structured vs. organic• Early feedback vs. interface stability
Deconstruction of Dyninst 17