17
Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill Williams

Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

Embed Size (px)

DESCRIPTION

Software Project Neat Idea What is Componentization? Public Interface Component Public Interface Component Deconstruction of Dyninst 3

Citation preview

Page 1: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

Paradyn Project

Paradyn / Dyninst WeekMadison, Wisconsin

May 2-4, 2011

Paradyn Project

Deconstruction of Dyninst:Best Practices and Lessons Learned

Bill Williams

Page 2: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

What is Componentization?

Software ProjectPublic Interface

Neat Idea

Deconstruction of Dyninst 2

Page 3: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

Software ProjectNeat Idea

What is Componentization?

Public Interface

Component

Public Interface

Component

Deconstruction of Dyninst 3

Page 4: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

Why Components?• Expose existing functionality• Build new tools easily• Orthogonality• Testability• Improved code quality

Deconstruction of Dyninst 4

Page 5: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

Dyninst and the Components

AST

Binary

Process

StackwalkerAPI

Patch API

SymtabAPI

DataFlowAPI

InstructionAPI

ParseAPI

CodeGen

ProcControlAPI

Binary

= Existing Component = New Component

= Proposed

DyninstAPI

Page 6: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

ParseAPI: Defining the component

BlockEdge

Function

Cached register liveness

info

Instrumentability

InstPoints

Dyninst CFG model

Deconstruction of Dyninst 6

Page 7: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

ParseAPI: Defining the component

Block

Edge

Function

Cached register liveness

info

Instrumentability

InstPoints

Dyninst extensionsParseAPI CFG model

Deconstruction of Dyninst 7

Page 8: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

PatchAPI: Refine your assumptions

Deconstruction of Dyninst 8

PatchAPI

Dyninst

Paradyn

Page 9: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

SymtabAPI: Creating good abstractions

…hiding messy internals

Great interface…

Deconstruction of Dyninst 9

ELF PE

XCOFF

Page 10: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

InstructionAPI: Adding missing features

Old: Control flow and not much else

Deconstruction of Dyninst 10

Page 11: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

InstructionAPI: Adding missing features

New: control flow and data flow

Deconstruction of Dyninst 11

Page 12: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

ProcControlAPI: Build one to throw away

Too many features, and I don’t need all of them!

Deconstruction of Dyninst 12

Page 13: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

ProcControlAPI: Build one to throw awayAh, something that just does what I need!

Deconstruction of Dyninst 13

Page 14: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

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

Page 15: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

DataflowAPI: Cool isn’t enoughCustomers: the difference between a module and a component

Deconstruction of Dyninst 15

Page 16: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

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

Page 17: Paradyn Project Paradyn / Dyninst Week Madison, Wisconsin May 2-4, 2011 Paradyn Project Deconstruction of Dyninst: Best Practices and Lessons Learned Bill

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