Dynamic Binary Analysis and Instrumentation

Total Page:16

File Type:pdf, Size:1020Kb

Dynamic Binary Analysis and Instrumentation UCAM-CL-TR-606 Technical Report ISSN 1476-2986 Number 606 Computer Laboratory Dynamic binary analysis and instrumentation Nicholas Nethercote November 2004 15 JJ Thomson Avenue Cambridge CB3 0FD United Kingdom phone +44 1223 763500 http://www.cl.cam.ac.uk/ c 2004 Nicholas Nethercote This technical report is based on a dissertation submitted November 2004 by the author for the degree of Doctor of Philosophy to the University of Cambridge, Trinity College. Technical reports published by the University of Cambridge Computer Laboratory are freely available via the Internet: http://www.cl.cam.ac.uk/TechReports/ ISSN 1476-2986 Abstract Dynamic binary analysis (DBA) tools such as profilers and checkers help programmers create better software. Dynamic binary instrumentation (DBI) frameworks make it easy to build new DBA tools. This dissertation advances the theory and practice of dynamic binary analysis and instrumentation, with an emphasis on the importance of the use and support of metadata. The dissertation has three main parts. The first part describes a DBI framework called Valgrind which provides novel features to support heavyweight DBA tools that maintain rich metadata, especially location metadata| the shadowing of every register and memory location with a metavalue. Location metadata is used in shadow computation, a kind of DBA where every normal operation is shadowed by an abstract operation. The second part describes three powerful DBA tools. The first tool performs detailed cache profiling. The second tool does an old kind of dynamic analysis|bounds-checking|in a new way. The third tool produces dynamic data flow graphs, a novel visualisation that cuts to the essence of a program's execution. All three tools were built with Valgrind, and rely on Valgrind's support for heavyweight DBA and rich metadata, and the latter two perform shadow computation. The third part describes a novel system of semi-formal descriptions of DBA tools. It gives many example descriptions, and also considers in detail exactly what dynamic analysis is. The dissertation makes six main contributions. First, the descriptions show that metadata is the key component of dynamic analysis; in particular, whereas static analysis predicts approximations of a program's future, dynamic analysis remembers approximations of a program's past, and these approximations are exactly what metadata is. Second, the example tools show that rich metadata and shadow computation make for powerful and novel DBA tools that do more than the traditional tracing and profiling. Third, Valgrind and the example tools show that a DBI framework can make it easy to build heavyweight DBA tools, by providing good support for rich metadata and shadow computation. Fourth, the descriptions are a precise and concise way of characterising tools, provide a directed way of thinking about tools that can lead to better implementations, and indicate the theoretical upper limit of the power of DBA tools in general. Fifth, the three example tools are interesting in their own right, and the latter two are novel. Finally, the entire dissertation provides many details, and represents a great deal of con- densed experience, about implementing DBI frameworks and DBA tools. 4 Contents 1 Introduction 11 1.1 Background . 11 1.1.1 Static Analysis vs. Dynamic Analysis . 11 1.1.2 Source Analysis vs. Binary Analysis . 12 1.1.3 Four Kinds of Program Analysis . 13 1.1.4 Static Binary Instrumentation vs. Dynamic Binary Instrumentation . 13 1.2 This Dissertation . 14 1.2.1 Dissertation Structure . 14 1.2.2 Contributions . 14 1.2.3 A Note About Implementations . 15 2 A Framework for Building Tools 17 2.1 Introduction . 17 2.1.1 Dynamic Binary Instrumentation Frameworks . 17 2.1.2 Overview of Valgrind . 17 2.1.3 Chapter Structure . 18 2.2 Using Valgrind . 18 2.3 How Valgrind Works: The Core . 19 2.3.1 Overview . 19 2.3.2 Definition of a Basic Block . 20 2.3.3 Resource Conflicts . 21 2.3.4 Starting Up . 22 2.3.5 Making Translations . 23 2.3.6 Executing Translations . 26 2.3.7 Floating Point, MMX and SSE Instructions . 26 2.3.8 Segment Registers . 27 2.3.9 Pthreads . 27 2.3.10 System Calls . 28 2.3.11 Signals . 29 2.3.12 Client Requests . 30 2.3.13 Self-modifying Code . 30 2.3.14 Memory Management . 30 2.3.15 Ensuring Correctness . 30 2.3.16 Termination . 31 2.3.17 Self-hosting . 31 2.4 How Valgrind Works: Tool Plug-ins . 31 5 2.4.1 An Example Tool: Memcheck . 31 2.4.2 Execution Spaces . 32 2.4.3 Tool Structure . 33 2.4.4 Shadow Computation . 34 2.4.5 Crucial Features . 35 2.5 Size of Core and Tool Plug-ins . 39 2.6 Performance . 39 2.7 Related Work . 41 2.7.1 Not Quite Dynamic Binary Analysis . 41 2.7.2 Not Quite Dynamic Binary Instrumentation . 42 2.7.3 Dynamic Binary Instrumentation Frameworks . 43 2.8 Conclusion . 53 3 A Profiling Tool 55 3.1 Introduction . 55 3.1.1 Profiling Tools . 55 3.1.2 Cache Effects . 55 3.1.3 Cache Profiling . 56 3.1.4 Overview of Cachegrind . 57 3.1.5 Chapter Structure . 57 3.2 Using Cachegrind . 57 3.3 How Cachegrind Works . 58 3.3.1 Metadata . 58 3.3.2 Instrumentation . 60 3.3.3 Code Unloading . 62 3.3.4 Output and Source Annotation . 62 3.3.5 Performance . 63 3.3.6 Useful Features . 64 3.3.7 Simulation Shortcomings . 64 3.3.8 Usability Shortcomings . 66 3.4 In Practice . 66 3.4.1 Language and Implementation . 66 3.4.2 Benchmark Suite . 67 3.4.3 Motivating Measurements . 67 3.4.4 Quantifying Cachegrind's Accuracy . 68 3.4.5 Use of Cachegrind . 69 3.4.6 Avoiding Data Write Misses . 69 3.5 Related Work . 70 3.6 Conclusion . 71 4 A Checking Tool 77 4.1 Introduction . 77 4.1.1 Checking Tools . 77 4.1.2 Bounds Errors . 77 4.1.3 Bounds-Checking . 78 4.1.4 Overview of Annelid . 78 4.1.5 Chapter Structure . 79 6 4.2 Using Annelid . 79 4.3 How Annelid Works: Design . 79 4.3.1 Overview . 80 4.3.2 Metadata . 80 4.3.3 Checking Accesses . 81 4.3.4 Life-cycle of a Segment . 82 4.3.5 Heap Segments . 82 4.3.6 Static Segments . 83 4.3.7 Stack Segments . 84 4.3.8 Shadow Computation Operations . 85 4.4 How Annelid Works: Implementation . 88 4.4.1 Metadata Representation . 88 4.4.2 Segment Structure Management . 89 4.4.3 Static Segments . 90 4.4.4 Stack Segments . 90 4.4.5 Range Tests . 91 4.4.6 Pointer Differences . 91 4.4.7 System Calls . ..
Recommended publications
  • Boundschecker Free Download
    Boundschecker free download click here to download I give Micro Focus and/or Micro Focus partners permission to contact me regarding Micro Focus products and services. View our Privacy Policy. Download here. IMO It might be a better idea to write custom memory manager (the one that supports new/delete/malloc/free wrappers). Make a new/delete. Our website provides a free download of Micro Focus DevPartner for Visual C++ BoundsChecker Suite Our antivirus check shows. Download Boundschecker - best software for Windows. Deleaker Add-in for Visual C++: Deleaker is a useful add-in for Visual Studio that helps. boundschecker Windows 10 downloads - Free boundschecker download for Windows 10 - Windows 10 Download - Free Windows 10 Download. DevPartner® Visual C++ BoundsChecker Suite; Visual COBOL® for Visual Download the zip file that contains the HeapAgent free trial. Breaking the bounds of BoundsChecker: Micro Focus DevPartner® for Visual C++ / BoundsChecker Suite extends the DevPartner BoundsChecker capabilities. NET and native support DevPartner VC++ BoundsChecker Suite - Geared for C/C++ Development Micro Focus Testing Solutions - ASQ for. You can also download this document in Microsoft Word for Windows version / format . On every call to allocate or free memory, HeapAgent validates the. BoundsChecker is a memory checking and API call validation tool used for C++ software From Wikipedia, the free encyclopedia. BoundsChecker is an indispensable tool for Windows programming. It finds errors that no one else can find (including tons in Microsoft's code!!). Its main focus is. Bounds checker Free Download,Bounds checker Software Collection Download. The transition from BoundsChecker tools to the Intel Inspector XE is straightforward.
    [Show full text]
  • Dxperience V2008 Vol 1 All Devexpress ASP.NET, Winforms, WPF and Productivity Tools in One Package
    /issue 66/us edition best selling publisher awards see page 58 .upThe latest dateproducts available at www.componentsource.com Experience the DevExpress Difference • ASP.NET, WinForms & WPF Components • IDE Productivity Tools • Business Application Frameworks In one integrated package • XtraReports Suite • XtraReports for ASP.NET • XtraGrid Suite • XtraCharts for ASP.NET • XtraEditors Suite • ASPxGridView • XtraCharts Suite • ASPxEditors • XtraPivotGrid Suite • ASPxPivotGrid • XtraBars Suite • ASPxperience • XtraScheduler Suite • ASPxTreeList • XtraLayout Control • ASPxSpellChecker • XtraNavBar • ASPxHTML Editor • XtraPrinting Library • CodeRush • XtraSpellChecker • Refactor! Pro • XtraVerticalGrid • eXpressPersistent Objects • XtraTreeList • eXpressApp Framework DXperience v2008 vol 1 All DevExpress ASP.NET, WinForms, WPF and Productivity Tools in one package Learn more at: www.componentsource.com/devexpress US Headquarters European Headquarters Asia / Pacific Headquarters ComponentSource ComponentSource ComponentSource 650 Claremore Prof Way 30 Greyfriars Road 3F Kojimachi Square Bldg www.componentsource.com Suite 100 Reading 3-3 Kojimachi Chiyoda-ku Woodstock Berkshire Tokyo GA 30188-5188 RG1 1PE Japan Sales Hotline: USA United Kingdom 102-0083 Tel: (770) 250 6100 Tel: +44 118 958 1111 Tel: +81-3-3237-0281 Fax: (770) 250 6199 Fax: +44 118 958 9999 Fax: +81-3-3237-0282 (888) 850-9911 /n software /n software Red Carpet Subscription 2008 Write communications, security and e-business applications. • Includes components for FTP, IMAP, SNMP, SSL, SSH, S/MIME, Digital Certificates, Credit Card Processing and e-business (EDI) transactions • Free updates, upgrades, tech support and new releases for a year NEW RELEASE IP*Works! Internet Communications Secure Components Includes IP*Works! which is a ATOM, REST, MX, DNS, RSS, NNTP, /n software Red Carpet comprehensive framework for SMPP, POP, Rexec, Rshell, SMTP, Subscription includes secure Internet development.
    [Show full text]
  • Dynamic Binary Analysis and Instrumentation Nicholas Nethercote
    Dynamic Binary Analysis and Instrumentation or Building Tools is Easy Nicholas Nethercote Trinity College A dissertation submitted for the degree of Doctor of Philosophy at the University of Cambridge Copyright c 2004 Nicholas Nethercote ii Statement of Originality Most of the work described in this dissertation is my own, but some of the work described was done in collaboration with others. Chapters 1, 6 and 7 are entirely my own work. Chapter 2 describes a software system that I implemented large parts of, but which is partly the work of others. Without my contributions to this system, the work described in chapters 3, 4, 5 and 6 would not have been possible. The contributions of others to this system are described within the text in Sections 1.2.3, 2.1.3 and 2.4.1. Chapter 2 is partly based on a publication [82] that I co-authored with Julian Seward. Chapters 3, 4 and 5 describe software tools that I designed and implemented. Chapter 3 contains one section (Section 3.4) that is derived from a publication [80] that I co-authored with Alan Mycroft. Chapter 4 is based on a publication [79] that I co-authored with Jeremy Fitzhardinge. Chapter 5 is based on a publication [81] that I co-authored with Alan Mycroft. The section “Author Publications” below lists all these publications. They are also listed in the bibliography. All the words, tables and figures within are my own. No part of this dissertation has been submitted, or is being concurrently submitted, for a degree or diploma or any other qualification at this or any other university.
    [Show full text]
  • The Parallel Programming Landscape
    THE STATE OF Parallel Programming The Parallel Programming Landscape Multicore has gone mainstream — but are developers ready? An Exclusive Research Report arallel computing is the primary way that processor The proliferation of multicore processors means manufacturers are dealing with the physical limits that software developers must incorporate P of transistor-based processor technology. Multiple parallelism into their programming in order processors — or cores — are joined together on a single inte- to achieve increased application performance. grated circuit to provide increased performance and better But many programmers are ill-equipped for energy efficiency than using a single processor. Multicore parallel programming, lacking the requisite technology is now standard in desktop and laptop computers. training and often relying on primitive devel- Mobile computing devices like smartphones and tablets are opment tools. The research shows that better also incorporating multicore processors into their designs. and simpler tools and libraries are needed to The problem with multicore computing is that help programmers parallelize their code and software applications no longer automatically benefit from to debug the complex concurrency bugs that improvements in processor performance the way they did parallelism exposes. in the past. Those benefits can only be realized by writing applications that expect and take advantage of parallelism. Sponsored by The State of Parallel Programming In 2006, Saman Amarasinghe, now a computer science Figure 2. How important is parallel programming to your work? professor at MIT, described this as a “looming software Not sure 1 crisis” for software developers who write code on platforms Critical – our software would not Not important – our 8% that abstract away processor architecture and who therefore software would not work without parallelism benefit from parallelism don’t know how to benefit from parallelism.
    [Show full text]
  • Valgrind for OSE
    Valgrind for OSE Lifei Tang 8/18/2012 Supervisor: Moris Behnam Supervisor: Mathias Engan Examiner: Thomas Nolte Supervisor: Daniel Forsgren Abstract For programmers, it is always painful and hard to identify non-fatal errors like memory leaks, out of boundary errors or data race condition with traditional debug tools e.g. GDB. Today, there are many tools available to help the programmers to find these problems. The collection of Valgrind tools is a good example. Valgrind itself is an open source framework for debugging and profiling. It is today available for Linux, Darwin and Android, on hardware platforms such as ARM, x86 and PPC. Valgrind virtualizes the user mode environment and depends on the host OS environment. This thesis explores how Valgrind could be adapted to support an OSE (a real-time operation system product from ENEA software AB) target in a Linux host environment. 1 | P a g e Acknowledgement I would like to thank many people, without their support this work would not have been possible. I am really grateful to my supervisor at ENEA Software AB, Mathias Engan, who offers tons of help for solving all kinds of issues from the technical problem to my the daily company life; and Daniel Forsgren, my special technical advisor at ENEA, who kindly and patiently helps me to harming the technical problems on a weekly basis and provide me lots of valuable ideas, without his helps, I won’t even know how to start the whole thing. I’d like to thank Dr. Moris Behnam and Prof. Thomas Nolte, my thesis supervisor and examiner at Mälardalen University, who provide me constructive advices on my thesis.
    [Show full text]
  • Devpartner Advanced Error Detection Techniques Table of Contents
    DevPartner 10.6.1 Advanced Error Detection Techniques Micro Focus The Lawn 22-30 Old Bath Road Newbury, Berkshire RG14 1QN UK http://www.microfocus.com Copyright © Micro Focus 2001-2012. All rights reserved. MICRO FOCUS, the Micro Focus logo and Visual COBOL are trademarks or registered trademarks of Micro Focus IP Development Limited or its subsidiaries or affiliated companies in the United States, United Kingdom and other countries. All other marks are the property of their respective owners. 2 DevPartner Advanced Error Detection Techniques Table of Contents Preface . 7 Who Should Read This Manual . 7 What This Manual Covers . 7 Conventions Used In This Manual . 8 Getting Help . 8 Contact . 9 Chapter 1 · Workflow and Configuration Settings . 11 DevPartner Error Detection Workflow . 11 Benefits of the DevPartner Error Detection Workflow . 12 Saving Error Detection Configurations . 12 Using Error Detection from the Command Line . 12 Compiling, Instrumenting, and Building Unmanaged (Native) C++ Projects with NMDE- VENV . 14 Instrumenting Native C/C++ Code with nmvcbuild . 14 Customizing the DevPartner Error Detection Settings . 15 General . 16 Data Collection . 16 API Call Reporting . 17 Call Validation . 17 COM Call Reporting . 17 COM Object Tracking . 17 Deadlock Analysis . 18 Memory Tracking . 18 .NET Call Reporting . 19 .NET Analysis . 19 Resource Tracking . 20 Modules and Files . 20 Fonts and Colors . 20 Configuration File Management . 20 Chapter 2 · Checking and Analyzing Programs . 23 Error Detection Tasks . 23 Finding Leaks . 23 Finding Pointer and Memory Errors . 23 Finding Memory Corruption . 24 Analyzing Transitions to Legacy Code in .NET Applications . 24 Validating Win32 API Calls . 25 Searching for Application Deadlocks .
    [Show full text]
  • DOUBLETAKE: Evidence-Based Dynamic Analysis
    DOUBLETAKE: Evidence-Based Dynamic Analysis Charlie Curtsinger Emery D. Berger Tongping Liu School of Computer Science Department of Computer Science University of Massachusetts Amherst The University of Texas at San Antonio Amherst, MA 01003 San Antonio, TX 78249-0667 {charlie,emery}@cs.umass.edu [email protected] Abstract a random value, also known as a “canary”, placed in unallocated Dynamic analysis can be helpful for debugging, but is often space between heap objects [13]. A corrupted canary is incontro- too expensive to use in deployed applications. We introduce vertible evidence that a buffer overflow occurred at some time in evidence-based dynamic analysis, an approach that enables ex- the past. tremely lightweight analyses for an important class of errors: those We present an approach called evidence-based dynamic analy- that can be forced to leave evidence of their existence. Evidence- sis that is based on the following key insight: by combining check- based dynamic analysis lets execution proceed at full speed until pointing with evidence gathering, it is possible to let applications the end of an epoch. It then examines program state to find evidence run at full speed in the common case (no errors). If we discover that an error occurred at some time during that epoch. If so, execu- evidence of an error, we can go back and re-execute the program tion is rolled back and re-execution proceeds with instrumentation with instrumentation activated to find the exact cause of the error. We present a prototype evidence-based dynamic analysis frame- activated to pinpoint the error.
    [Show full text]
  • DOUBLETAKE: Fast and Precise Error Detection Via Evidence-Based Dynamic Analysis
    2016 IEEE/ACM 38th IEEE International Conference on Software Engineering DOUBLETAKE: Fast and Precise Error Detection via Evidence-Based Dynamic Analysis Tongping Liu ∗ Charlie Curtsinger ∗ Emery D. Berger Dept. of Computer Science Dept. of Computer Science College of Information and University of Texas Grinnell College Computer Sciences at San Antonio 1116 8th Ave. University of Massachusetts San Antonio, TX 78249 Grinnell, IA 50112 Amherst [email protected] [email protected] Amherst, MA 01003 [email protected] ABSTRACT Categories and Subject Descriptors Programs written in unsafe languages like C and C++ often suffer D.2.5 [Software Engineering]: Testing and Debugging–Debugging from errors like buffer overflows, dangling pointers, and memory Aids, Monitors, Tracing; D.2.4 [Software Engineering]: Soft- leaks. Dynamic analysis tools like Valgrind can detect these er- ware/Program Verification–Reliability rors, but their overhead—primarily due to the cost of instrumenting every memory read and write—makes them too heavyweight for use in deployed applications and makes testing with them painfully Keywords slow. The result is that much deployed software remains suscepti- Dynamic Analysis, Software Quality, Testing, Debugging, Leak ble to these bugs, which are notoriously difficult to track down. Detection, Buffer Overflow Detection, Use-After-Free Detection This paper presents evidence-based dynamic analysis, an ap- proach that enables these analyses while imposing minimal over- 1. INTRODUCTION head (under 5%), making it practical for the first time to perform these analyses in deployed settings. The key insight of evidence- Dynamic analysis tools are widely used to find bugs in appli- based dynamic analysis is that for a class of errors, it is possible to cations.
    [Show full text]
  • The Developer's Guide to Debugging
    The Developer’s Guide to Debugging Thorsten Grotker¨ · Ulrich Holtmann Holger Keding · Markus Wloka The Developer’s Guide to Debugging 123 Thorsten Gr¨otker Ulrich Holtmann Holger Keding Markus Wloka Internet: http://www.debugging-guide.com Email: [email protected] ISBN: 978-1-4020-5539-3 e-ISBN: 978-1-4020-5540-9 Library of Congress Control Number: 2008929566 c 2008 Springer Science+Business Media B.V. No part of this work may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, microfilming, recording or otherwise, without written permission from the Publisher, with the exception of any material supplied specifically for the purpose of being entered and executed on a computer system, for exclusive use by the purchaser of the work. Printed on acid-free paper 987654321 springer.com Foreword Of all activities in software development, debugging is probably the one that is hated most. It is guilt-ridden because a technical failure suggests personal fail- ure; because it points the finger at us showing us that we have been wrong. It is time-consuming because we have to rethink every single assumption, every single step from requirements to implementation. Its worst feature though may be that it is unpredictable: You never know how much time it will take you to fix a bug - and whether you’ll be able to fix it at all. Ask a developer for the worst moments in life, and many of them will be related to debugging. It may be 11pm, you’re still working on it, you are just stepping through the program, and that’s when your spouse calls you and asks you when you’ll finally, finally get home, and you try to end the call as soon as possible as you’re losing grip on the carefully memorized observations and deductions.
    [Show full text]
  • SECURE BIT: BUFFER-OVERFLOW PROTECTION by Krerk Piromsopa
    SECURE BIT: BUFFER-OVERFLOW PROTECTION By Krerk Piromsopa A DISSERTATION Submitted to Michigan State University In partial fulfillment of the requirements For the degree of DOCTOR OF PHILOSOPHY Department of Computer Science and Engineering 2006 ABSTRACT SECURE BIT: BUFFER-OVERFLOW PROTECTION By Krerk Piromsopa For decades, buffer-overflow attacks have remained the most persistent threat to the computer security world. The most common type of buffer-overflow attacks is an attack that changes the control flow by overflowing control data. In this thesis, Secure Bit, architectural approach, is proposed to protect against buffer- overflow attacks on control data (return-address and function-pointer attacks in particular). Secure Bit provides a hardware bit to enforce the integrity of addresses from being modified by external data (input). Secure Bit is completely transparent to user software; providing full backward compatibility with legacy user code. It can detect and prevent all address-corrupting buffer-overflow attacks with little run-time performance penalty. Addresses passed in buffers between processes are marked insecure and control instructions using those addresses as targets will raise an exception. An important differentiating aspect of this protocol is that once an address has been marked as insecure there is no instruction to remark it as secure. To validate Secure Bit, we first theoretically pursue a secure system with respect to buffer-overflow attacks and prove that Secure Bit provides a sufficient condition for preventing buffer-overflow attacks. Robustness and transparency are demonstrated by emulating the hardware, and booting Linux on the emulator, running application software on that Linux, and performing known attacks.
    [Show full text]
  • Devpartner Studio Professional Edition Build Microsoft Applications with Confidence
    DATA SHEET DEVPARTNER STUDIO PROFEssIONAL EdITION Build Microsoft applications with confidence. DevPartner Studio enhances Microsoft Visual Studio and Visual Studio Team System with an award- winning suite of code quality features that increase development productivity. DevPartner Studio automatically detects and diagnoses software defects, performance problems and security vulnerabilities early in the development process—when problem resolution is most cost-effective. With expert advice, coding standards and best practices built in, DevPartner Studio Professional Edition enables Windows application teams to improve software quality, maximize developer productivity and deliver superior software reliability, performance and security. DATA SHEET | DevPartner Studio Professional Edition Review source code, DevPartner Studio code review provides a list of potential errors and inconsistencies, and detect errors expert advice on how to fix them. Security scanning checks each line of ASP.NET code Commonly accepted software for more than 200 security vulnerabilities. development practices typically include Code complexity is an early indicator peer reviews of the source code under of potential quality problems so development. The downside is manual understanding which parts of an code reviews tend to be time-consuming, application are most complex can facilitate if carried out at all, leaving development better testing. DevPartner Studio code teams less time to focus on other projects review automatically calculates the code and requirements. complexity and “bad-fix” probability of DevPartner Studio assists development each method in a .NET application. These teams by automating the code review metrics provide priority and guidance to process. The code review function quickly help focus test suite development on code examines source code from a variety of that has the highest potential to contain languages, including Visual Basic .NET, undiscovered defects.
    [Show full text]
  • Understanding Devpartner Studio
    Understanding DevPartner ® DevPartner Studio Professional Edition DevPartner Studio Enterprise Edition DevPartner for Visual C++ BoundsChecker Suite Release 9.0 Technical support is available from our Technical Support Hotline or via our FrontLine Support Web site. Technical Support Hotline: 1-800-538-7822 FrontLine Support Web Site: http://frontline.compuware.com This document and the product referenced in it are subject to the following legends: Access is limited to authorized users. Use of this product is subject to the terms and conditions of the user’s License Agreement with Compuware Corporation. © 2008 Compuware Corporation. All rights reserved. Unpublished - rights reserved under the Copyright Laws of the United States. U.S. GOVERNMENT RIGHTS Use, duplication, or disclosure by the U.S. Government is subject to restrictions as set forth in Compuware Corporation license agreement and as provided in DFARS 227.7202-1(a) and 227.7202-3(a) (1995), DFARS 252.227-7013(c)(1)(ii)(OCT 1988), FAR 12.212(a) (1995), FAR 52.227-19, or FAR 52.227-14 (ALT III), as applicable. Compuware Corporation. This product contains confidential information and trade secrets of Com- puware Corporation. Use, disclosure, or reproduction is prohibited with- out the prior express written permission of Compuware Corporation. DevPartner® and BoundsChecker are trademarks or registered trademarks of Compuware Corporation. Adobe® Reader copyright © 1984-2008 Adobe Systems Incorporated. All rights reserved. Adobe, Acrobat, and Acrobat Reader are trademarks of Adobe Systems Incorporated. All other company or product names are trademarks of their respective owners. US Patent Nos.: 5,987,249, 6,332,213, 6,186,677, 6,314,558, 6,760,903 B1,and 6,016,466 September 19, 2008 Table of Contents Preface Who Should Read This Manual .
    [Show full text]