IP Library Granted Patent US 6,968,540
Granted Patent B2
US 6,968,540 · App. 09/879,838 · Granted Nov 22, 2005

Software instrumentation method and apparatus

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 6,968,540
App. No.
09/879,838
Granted
Nov 22, 2005
Kind
B2
Abstract

Methods and an apparatus for instrumenting object oriented software that do not require modification to existing source code or to executable files, nor do they require modification to any existing sequences of object resident instructions. Methods include the class interceptor, doppelganger and method hijacking software instrumentation techniques. The class interceptor technique intercepts and monitors the paths of execution associated with methods inherited by a target class. The class doppelganger technique intercepts and monitors the paths of execution entering a target class. The method hijacking technique creates and adds instrumented methods directly to a target class.

Claims (62)

1. A method for instrumenting object-oriented virtual-machine-executable software comprised of class files containing bytecode including instructions, each class file being defined by a class and each class being associated with a class-hierarchy location and having a corresponding class name, the method comprising the steps of:

(a) identifying a class included in the software as a target class wherein the target class is associated with a first class-hierarchy location and with a first class name;

(b) instrumenting the target class by one of

(i) creating a new instrumented class separate from the target class, adding instrumentation to the new instrumented class, and assigning the new instrumented class to a class-hierarchy location adjacent to and above the first class-hierarchy location of the target class, whereby the instructions of the target class remain in an original, unmodified form; and

(ii) creating a new instrumented class separate from the target class, adding instrumentation to the new instrumented class, and assigning the new instrumented class to a class-hierarchy location adjacent to and below the first class-hierarchy location of the target class, assigning the first class name to the new instrumented class and assigning a second class name to the target class whereby the instructions of the target class remain in an original, unmodified form; and

(iii) creating an instrumented class of the target class by adding instrumentation to the target class without modifying the instructions within the target class and retaining the first class name for the new instrumented class, whereby the target class becomes the instrumented class and the instructions of the target class remain in an original, unmodified form; and,

(c) causing a virtual machine to process the class having the first class name as the target class.

2. The method of claim 1 including the following by the steps of:

(aa) after completing step (a), operating a virtual machine to initiate loading and execution of the virtual machine executable software;

(ab) after completing step (aa) suspending the operation of the virtual machine after loading and before linking the target class;

(ca) after completing step (c), un-suspending operation of the virtual machine.

3. The method of claim 1 including the following by the steps of:

(aa) after completing step (a), operating a virtual machine to initiate loading and execution of the virtual machine executable software;

(ab) after completing step (aa) suspending the operation of the virtual machine after loading and before linking the target class to execute a software program that executes step (c);

(ca) upon termination of the software program that executes step (c) resuming the operation of the virtual machine.

4. The method of claim 1 wherein the virtual-machine is a JAVA™ virtual machine and the step of identifying the target class included within the virtual machine executable software includes the steps of:

(a) specifying a set of class attribute names and associated value descriptions matching class attribute names and associated values possessed by a class included in the virtual-machine-executable software; the set including an attribute name of a set of attribute names including

i. a class name,

ii. an interface name,

iii. a parent class name,

iv. an inherited method name,

v. a defined method name,

vi. a private method name,

vii. an inherited field name,

viii. a defined field name,

ix. a private field name,

x. a constant value attribute,

xi. a synthetic attribute,

xii. a code attribute,

xiii. an exception attribute, and

xiv. a depreciated attribute,

(b) searching for a class possessing a class attribute name and an associated value consistent with the set of specified class attribute name and associated value description; and

(c) classifying the class posessing a attribute name and an associated value consistent with the set of specified class attribute names and associated value description as the target class.

5. The method of claim 1 wherein the steps of suspending and un-suspending the operation of the virtual machine are performed using an interface provided by the virtual machine.

6. The method of claim 1 wherein the steps of suspending and un-suspending the operation of the virtual machine are performed using a virtual machine that is modified to perform this capability.

7. The method of claim 1 wherein the virtual machine is a JAVA™ virtual machine.

8. The method of claim 1 wherein the virtual-machine is a JAVA™ virtual machine and the steps of adding instrumentation to the target class include adding, removing, modifying, reordering or substituting a named class component of a set of named class components including:

(i) a class name,

(ii) a super class name,

(iii) a interface index array,

(iv) a field table,

(v) a method table,

(vi) a constant pool,

(vii) an attribute table,

(viii) an index array, and

(ix) access flags.

9. The method of claim 6 wherein the class component is represented by a plurality of memory locations, the step of modifying a class component including adding, removing, reordering or substituting a memory locations representing the class component or changing the content of a memory location representing the class component.

10. The method of claim 1 wherein the target class is represented by a plurality of memory locations, the step of adding instrumentation to the target class including adding, removing, or reordering or substituting a memory location representing the target class or changing the contents of a memory I location representing the target class.

11. The method of claim 1 wherein the step of assigning the new instrumented class to a class hierarchy location adjacent to and above the class hierarchy location associated with the target class includes:

modifying the new instrumented class to recognize a super class associated with the target class as the super class associated with the new instrumented class;

modifying the target class to recognize the new instrumented class as the super class associated with the target class.

12. The method of claim 1 wherein the step of assigning the new instrumented class to a class hierarchy location adjacent to and below the class hierarchy location associated with the target class includes modifying the new instrumented class to recognize the target class as the super class associated with the new instrumented class.

13. An apparatus for instrumenting object oriented virtual-machine-executable software comprised of class files containing bytecode including instructions, each class file being defined by a class and associated with a class-hierarchy location and having a corresponding class name, comprising:

(a) a target class identifier that identifies a class included in the software as a target class wherein the target class is associated with a first class-hierarchy location and with a first class name;

(b) an instrumenter instrumenting the bytecode of the target class by one of

(i) creating a new instrumented class separate from the target class, adding instrumentation to the new instrumented class, and assigning the new instrumented class to a class-hierarchy location adjacent to and above the first class-hierarchy location of the target class, whereby the instructions of the target class remain in an original, unmodified form;

(ii) creating a new instrumented class separate from the target class, adding instrumentation to the new instrumented class, and assigning the new instrumented class to a class-hierarchy location adjacent to and below the first class-hierarchy location of the target class, assigning the first class name to the new instrumented class and assigning a second class name to the target class, whereby the instructions of the target class remain in original, unmodified form; and

(iii) creating an instrumented class of the target class by adding instrumentation to the target class without modifying the instructions within the target class and retaining the first class name for the new instrumented class, whereby the target class becomes the instrumented class and the instructions of the target class remain in the original, unmodified form; and,

(c) a virtual machine for processing the class having the first name as the target class.

14. The apparatus for instrumenting object oriented virtual-machine-executable software of claim 13 , further including class identification apparatus for identifying a class included within object oriented virtual-machine-executable software, the class identification apparatus comprising:

a class query engine which receives as input a set of class attribute names and associated value descriptions; and

a class searcher that sequentially searches classes included in the software and performs a predetermined action upon identifying a class that possesses a set of class attribute names and associated values that match the set of class attribute names and associated value descriptions as the target class.

Assignments (19)
RELEASE OF SECURITY INTEREST Recorded Aug 11, 2023
From: ALTER DOMUS (US) LLC, AS COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC; RIVERBED HOLDINGS, INC.
Reel/Frame 064673/0739 →
CHANGE OF NAME Recorded Feb 10, 2022
From: RIVERBED TECHNOLOGY, INC.
To: RIVERBED TECHNOLOGY LLC
Reel/Frame 059009/0906 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS Recorded Dec 27, 2021
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS U.S. COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
Reel/Frame 058593/0169 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS Recorded Dec 27, 2021
From: ALTER DOMUS (US) LLC, AS COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
Reel/Frame 058593/0108 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS Recorded Dec 27, 2021
From: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
Reel/Frame 058593/0046 →
SECURITY INTEREST Recorded Dec 10, 2021
From: RIVERBED TECHNOLOGY LLC (FORMERLY RIVERBED TECHNOLOGY, INC.); ATERNITY LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS U.S. COLLATERAL AGENT
Reel/Frame 058486/0216 →
PATENT SECURITY AGREEMENT Recorded Oct 27, 2021
From: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 057943/0386 →
PATENT SECURITY AGREEMENT SUPPLEMENT - FIRST LIEN Recorded Oct 14, 2021
From: RIVERBED HOLDINGS, INC.; RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
To: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
Reel/Frame 057810/0502 →
PATENT SECURITY AGREEMENT SUPPLEMENT - SECOND LIEN Recorded Oct 14, 2021
From: RIVERBED HOLDINGS, INC.; RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
To: ALTER DOMUS (US) LLC, AS COLLATERAL AGENT
Reel/Frame 057810/0559 →
RELEASE OF SECURITY INTEREST IN PATENTS RECORED AT REEL 056397, FRAME 0750 Recorded Oct 13, 2021
From: MACQUARIE CAPITAL FUNDING LLC
To: RIVERBED HOLDINGS, INC.; RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
Reel/Frame 057983/0356 →
SECURITY INTEREST Recorded May 26, 2021
From: RIVERBED HOLDINGS, INC.; RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
To: MACQUARIE CAPITAL FUNDING LLC
Reel/Frame 056397/0750 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 30, 2020
From: RIVERBED TECHNOLOGY, INC.
To: ATERNITY LLC
Reel/Frame 054778/0540 →
CORRECTIVE ASSIGNMENT TO CORRECT THE CONVEYING PARTY NAME PREVIOUSLY RECORDED ON REEL 035521 FRAME 0069. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITY INTEREST IN PATENTS. Recorded Jun 2, 2015
From: JPMORGAN CHASE BANK, N.A.
To: RIVERBED TECHNOLOGY, INC.
Reel/Frame 035807/0680 →
SECURITY INTEREST Recorded May 1, 2015
From: RIVERBED TECHNOLOGY, INC.
To: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
Reel/Frame 035561/0363 →
RELEASE OF SECURITY INTEREST IN PATENTS Recorded Apr 28, 2015
From: BARCLAYS BANK PLC
To: RIVERBED TECHNOLOGY, INC.
Reel/Frame 035521/0069 →
PATENT SECURITY AGREEMENT Recorded Dec 27, 2013
From: RIVERBED TECHNOLOGY, INC.
To: JPMORGAN CHASE BANK, N.A., AS ADMINISTRATIVE AGENT
Reel/Frame 032421/0162 →
RELEASE OF PATENT SECURITY INTEREST Recorded Dec 26, 2013
From: MORGAN STANLEY & CO. LLC, AS COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.
Reel/Frame 032113/0425 →
SECURITY AGREEMENT Recorded Dec 20, 2012
From: RIVERBED TECHNOLOGY, INC.; OPNET TECHNOLOGIES, INC.
To: MORGAN STANLEY & CO. LLC
Reel/Frame 029646/0060 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 16, 2012
From: SILICON VALLEY BANK
To: ALTAWORKS CORPORATION
Reel/Frame 029145/0382 →