IP Library Patent Application 11711387
Patent Application
App. No. 11/711,387

History-based call stack construction

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 None
App. No.
11/711,387
Abstract

In a computing system environment, methods and apparatus relate to constructing a call stack for a software program based upon a comprehensive recording of an execution history of the software program. Upon defining procedure calls and returns in the execution history, a call stack is constructed for the procedure calls having no corresponding returns, but without reading or otherwise examining allocated stack memory or registers, such as return addresses. In this manner, an accurate call stack can be constructed despite stack memory or registers being erased or corrupted or despite various compiler optimizations eliminating convenience or otherwise complicating the construction. Nuances for defining procedure calls and returns as well as stack pointer values for same are also contemplated. Still other embodiments relate to stand-alone computer program products (on computer-readable media or as a download, or other) or those working in conjunction with other programs.

Claims (35)

1 . In a computing environment, a method of constructing a call stack for a software program, the call stack having allocated memory or registers in the computing environment, comprising:

obtaining a comprehensive recording of an execution history of the program;

determining which procedure calls have no corresponding returns, the returns having a corresponding return address in either the allocated memory or registers; and

for display to a user in the computing environment, constructing a list of the determined procedure calls having no corresponding returns without reading the return address in the allocated memory or registers.

2 . The method of claim 1 , further including defining the procedure calls as any of a plurality of call instructions in the execution history not calling a target of an immediate next instruction.

3 . The method of claim 1 , further including defining the procedure calls as any of a plurality of control transfers in the execution history to an instruction having a procedure label.

4 . The method of claim 1 , further including defining the returns as any of a plurality of returns before a time T 2 whereby a stack pointer value at a time T is greater than a stack pointer value at a time T 1 , whereby T 1 <T≦T 2 .

5 . The method of claim 1 , further including iterating a backward progression to determine a timestamp of a most recent of the procedure calls have no corresponding returns.

6 . The method of claim 1 , further including establishing a candidate set of stack pointer values earlier or concurrent to a time corresponding to the constructing the list of the determined procedure calls having no corresponding returns.

7 . The method of claim 6 , further including filtering out stack pointer values having related returns from the candidate set of stack pointer values.

8 . The method of claim 7 , wherein the filtering out further includes determining a last time less than the time such that the last time immediately follows one of the procedure calls and a stack pointer value for the last time is greater than a stack pointer value for the time.

9 . A computer program product having computer-executable instructions for performing the determining and constructing steps recited in claim 1 .

10 . In a computing environment, a method of constructing a call stack for a software program, comprising:

allocating memory or registers in the computing environment to the call stack;

recording an execution history of the program;

determining which procedure calls of the execution history have no corresponding returns, the returns having a corresponding return address in either the allocated memory or registers;

constructing a list of the determined procedure calls having no corresponding returns without reading the return address in the allocated memory or registers; and

displaying the constructed list as a call stack to a user in the computing environment.

11 . The method of claim 10 , further including defining the procedure calls as any of a plurality of call instructions in the execution history not calling a target of an immediate next instruction.

12 . The method of claim 10 , further including defining the procedure calls as any of a plurality of control transfers in the execution history to an instruction having a procedure label.

13 . The method of claim 10 , further including defining the returns as any of a plurality of returns before a time T 2 whereby a stack pointer value at a time T is greater than a stack pointer value at a time T 1 , whereby T 1 <T≦T 2 .

14 . The method of claim 10 , further including iterating a backward progression to determine a timestamp of a most recent of the procedure calls have no corresponding returns.

15 . The method of claim 1 , further including establishing a candidate set of stack pointer values earlier or concurrent to a time corresponding to the constructing the list of the determined procedure calls having no corresponding returns.

16 . A computer program product having computer-executable instructions for installation on a computing device for constructing a call stack for a software program on or in communication with the computing device, the call stack having allocated memory or registers in the computing environment, comprising:

a first component functional to understand a comprehensive recording of an execution history of the program;

a second component to determine which procedure calls of the execution history have no corresponding returns, the returns having a corresponding return address in either the allocated memory or registers;

a third component to construct a stacked list of the determined procedure calls having no corresponding returns without reading any of the return addresses in the allocated memory or registers; and

a fourth component functional to cause display to a user of the stacked list on a monitor of the computing device.

17 . The computer program product of claim 16 , further including a fifth component setting the procedure calls as any of a plurality of call instructions in the execution history not calling a target of an immediate next instruction.

18 . The computer program product of claim 16 , further including a fifth component setting the procedure calls as any of a plurality of control transfers in the execution history to an instruction having a procedure label.

19 . The computer program product of claim 16 , further including a fifth component setting the returns as any of a plurality of returns before a time T 2 whereby a stack pointer value at a time T is greater than a stack pointer value at a time T 1 , whereby T 1 <T≦T 2 .

20 . The computer program product of claim 16 , further including a fifth component iterating a backward progression to determine a timestamp of a most recent of the procedure calls have no corresponding returns.

21 . The computer program product of claim 16 , further including a fifth component establishing a candidate set of stack pointer values earlier or concurrent to a time corresponding to the constructing the list of the determined procedure calls having no corresponding returns.

22 . The computer program product of claim 21 , further including a fifth component filtering out stack pointer values having related returns from the candidate set of stack pointer values.

23 . The computer program product of claim 22 , further including a fifth component determining a last time less than the time such that the last time immediately follows one of the procedure calls and a stack pointer value for the last time is greater than a stack pointer value for the time.

Assignments (5)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 11, 2016
From: NOVELL INTELLECTUAL PROPERTY HOLDINGS, INC.
To: RPX CORPORATION
Reel/Frame 037809/0057 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 1, 2011
From: CPTN HOLDINGS LLC
To: NOVELL INTELLECTUAL PROPERTY HOLDING, INC.
Reel/Frame 027325/0131 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 30, 2011
From: CPTN HOLDINGS LLC
To: NOVELL INTELLECTUAL PROPERTY HOLDINGS, INC.
Reel/Frame 027465/0206 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 30, 2011
From: NOVELL,INC.
To: CPTN HOLDINGS LLC
Reel/Frame 027465/0227 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 27, 2007
From: O'CALLAHAN, ROBERT W.
To: NOVELL, INC.
Reel/Frame 019038/0920 →