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

Deconstruction of Dyninst : Best Practices and Lessons Learned

  • Upload
    briar

  • View
    36

  • Download
    0

Embed Size (px)

DESCRIPTION

Deconstruction of Dyninst : Best Practices and Lessons Learned. Bill Williams. What is Componentization?. Software Project. Public Interface. Neat Idea. What is Componentization?. Software Project. Public Interface. Public Interface. Neat Idea. Component. Component. Why Components?. - PowerPoint PPT Presentation

Citation preview

Page 1: Deconstruction of  Dyninst : Best Practices and Lessons Learned

Paradyn Project

Paradyn / Dyninst WeekMadison, Wisconsin

May 2-4, 2011

Paradyn Project

Deconstruction of Dyninst:Best Practices and Lessons Learned

Bill Williams

Page 2: Deconstruction of  Dyninst : Best Practices and Lessons Learned

What is Componentization?

Software ProjectPublic Interface

Neat Idea

Deconstruction of Dyninst 2

Page 3: Deconstruction of  Dyninst : Best Practices and Lessons Learned

Software ProjectNeat Idea

What is Componentization?

Public Interface

Component

Public Interface

Component

Deconstruction of Dyninst 3

Page 4: Deconstruction of  Dyninst : Best Practices and Lessons Learned

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

Deconstruction of Dyninst 4

Page 5: Deconstruction of  Dyninst : Best Practices and Lessons Learned

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: Deconstruction of  Dyninst : Best Practices and Lessons Learned

ParseAPI: Defining the component

BlockEdge

Function

Cached register liveness

info

Instrumentability

InstPoints

Dyninst CFG model

Deconstruction of Dyninst 6

Page 7: Deconstruction of  Dyninst : Best Practices and Lessons Learned

ParseAPI: Defining the component

Block

Edge

Function

Cached register liveness

info

Instrumentability

InstPoints

Dyninst extensionsParseAPI CFG model

Deconstruction of Dyninst 7

Page 8: Deconstruction of  Dyninst : Best Practices and Lessons Learned

PatchAPI: Refine your assumptions

Deconstruction of Dyninst 8

PatchAPI

Dyninst

Paradyn

Page 9: Deconstruction of  Dyninst : Best Practices and Lessons Learned

SymtabAPI: Creating good abstractions

…hiding messy internals

Great interface…

Deconstruction of Dyninst 9

ELF PE

XCOFF

Page 10: Deconstruction of  Dyninst : Best Practices and Lessons Learned

InstructionAPI: Adding missing features

Old: Control flow and not much else

Deconstruction of Dyninst 10

Page 11: Deconstruction of  Dyninst : Best Practices and Lessons Learned

InstructionAPI: Adding missing features

New: control flow and data flow

Deconstruction of Dyninst 11

Page 12: Deconstruction of  Dyninst : Best Practices and Lessons Learned

ProcControlAPI: Build one to throw away

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

Deconstruction of Dyninst 12

Page 13: Deconstruction of  Dyninst : Best Practices and Lessons Learned

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

Deconstruction of Dyninst 13

Page 14: Deconstruction of  Dyninst : Best Practices and Lessons Learned

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: Deconstruction of  Dyninst : Best Practices and Lessons Learned

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

Deconstruction of Dyninst 15

Page 16: Deconstruction of  Dyninst : Best Practices and Lessons Learned

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: Deconstruction of  Dyninst : Best Practices and Lessons Learned

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