Muutke küpsiste eelistusi

Dynamic Binary Modification: Tools, Techniques and Applications [Pehme köide]

  • Formaat: Paperback / softback, 81 pages, kõrgus x laius: 235x187 mm
  • Sari: Synthesis Lectures on Computer Architecture
  • Ilmumisaeg: 30-Mar-2011
  • Kirjastus: Morgan & Claypool Publishers
  • ISBN-10: 1608454584
  • ISBN-13: 9781608454587
Teised raamatud teemal:
  • Formaat: Paperback / softback, 81 pages, kõrgus x laius: 235x187 mm
  • Sari: Synthesis Lectures on Computer Architecture
  • Ilmumisaeg: 30-Mar-2011
  • Kirjastus: Morgan & Claypool Publishers
  • ISBN-10: 1608454584
  • ISBN-13: 9781608454587
Teised raamatud teemal:
Dynamic binary modification tools form a software layer between a running application and the underlying operating system, providing the powerful opportunity to inspect and potentially modify every user-level guest application instruction that executes. Toolkits built upon this technology have enabled computer architects to build powerful simulators and emulators for design-space exploration, compiler writers to analyze and debug the code generated by their compilers, software developers to fully explore the features, bottlenecks, and performance of their software, and even end-users to extend the functionality of proprietary software running on their computers. Several dynamic binary modification systems are freely available today that place this power into the hands of the end user. While these systems are quite complex internally, they mask that complexity with an easy-to-learn API that allows a typical user to ramp up fairly quickly and build any of a number of powerful tools. Meanwhile, these tools are robust enough to form the foundation for software products in use today.

This book serves as a primer for researchers interested in dynamic binary modification systems, their internal design structure, and the wide range of tools that can be built leveraging these systems. The hands-on examples presented throughout form a solid foundation for designing and constructing more complex tools, with an appreciation for the techniques necessary to make those tools robust and efficient. Meanwhile, the reader will get an appreciation for the internal design of the engines themselves.
Acknowledgments xiii
1 Dynamic Binary Modification: Overview
1(6)
1.1 Utility
2(1)
1.2 Functionality
3(1)
1.3 System Performance
4(1)
1.4 High-Level Summary
5(2)
2 Using a Dynamic Binary Modifier
7(10)
2.1 Heavyweight vs. Lightweight Control
7(1)
2.1.1 JIT-Mode Execution
7(1)
2.1.2 Probe-Mode Execution
8(1)
2.1.3 Persistent Binary Modification
8(1)
2.2 Launching the System
8(2)
2.2.1 Complete Process Control
9(1)
2.2.2 Attaching to an Existing Process
10(1)
2.3 Programmable Instrumentation
10(3)
2.4 Platform-Specific Behaviors
13(1)
2.5 End-User Optimizations
14(1)
2.6 Debugging Your Plug-In Tool
15(2)
3 Program Analysis and Debugging
17(8)
3.1 Program Analysis Examples
17(5)
3.2 Parallel Program Analysis
22(1)
3.3 Deterministic Replay
23(1)
3.4 Customizable Debugging
24(1)
4 Active Program Modification
25(6)
4.1 Fine-Grained Instruction Modification
25(1)
4.2 Function Replacement
26(1)
4.3 Dynamic Optimization
27(2)
4.4 Sandboxing and Security Enforcement
29(2)
5 Architectural Exploration
31(8)
5.1 Simulation
31(4)
5.1.1 Trace Generation
32(1)
5.1.2 Functional Cache Simulation
33(1)
5.1.3 Functional Branch Prediction Simulation
34(1)
5.1.4 Timing Simulation
34(1)
5.2 Emulation
35(2)
5.2.1 Supporting New Instructions
36(1)
5.2.2 Masking Hardware Flaws
36(1)
5.3 Binary Translation
37(1)
5.4 Design-Space Exploration
38(1)
6 Advanced System Internals
39(16)
6.1 Modes of Execution
39(1)
6.1.1 Modified Copy on Demand
39(1)
6.1.2 Modification in Place
39(1)
6.2 A Shared Address Space
40(1)
6.3 Acquiring Control
41(1)
6.4 Maintaining Control: JIT Compilation
42(1)
6.5 Storing Modified Code: The Code Cache
42(6)
6.5.1 Forming Traces of Modified Code
43(2)
6.5.2 Code Cache Eviction and Replacement
45(1)
6.5.3 Code Cache Introspection
46(1)
6.5.4 Handling Self-Modifying Code
47(1)
6.6 The Emulator
48(1)
6.7 Multithreaded Program Support
49(2)
6.7.1 Thread-Shared Code Caches
49(1)
6.7.2 Generational Cache Replacement
50(1)
6.8 Windows Execution Support
51(1)
6.9 Masking Overhead with Parallelism
52(1)
6.10 Remaining Challenges
53(2)
7 Historical Perspectives
55(2)
8 Summary and Observations
57(2)
Bibliography 59(8)
Author's Biography 67