US11593249B2 - Scalable points-to analysis via multiple slicing - Google Patents
Scalable points-to analysis via multiple slicing Download PDFInfo
- Publication number
- US11593249B2 US11593249B2 US14/757,684 US201514757684A US11593249B2 US 11593249 B2 US11593249 B2 US 11593249B2 US 201514757684 A US201514757684 A US 201514757684A US 11593249 B2 US11593249 B2 US 11593249B2
- Authority
- US
- United States
- Prior art keywords
- program
- slice
- software program
- pointer analysis
- entry point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active, expires
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 220
- 238000000034 method Methods 0.000 claims abstract description 127
- 230000001419 dependent effect Effects 0.000 claims abstract description 83
- 238000011156 evaluation Methods 0.000 description 10
- 230000007547 defect Effects 0.000 description 9
- 238000005457 optimization Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000001010 compromised effect Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 238000005056 compaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000003028 elevating effect Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/3604—Analysis of software for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
Definitions
- Pointer analysis (also known as points-to analysis) has become a fundamental static program analysis technology leveraged by program analyses including optimization, verification, debugging, and security.
- a pointer analysis may compute the set of memory locations accessible by a pointer (reference) variable.
- one or more embodiments of the invention relate to a method for analyzing software with pointer analysis including obtaining a software program, and determining a first independent program slice of the software program.
- the first independent program slice describes a first code segment of the software program.
- the method further includes determining, using a first pointer analysis objective, a first result from performing a first pointer analysis on the first independent program slice, and determining, using the first result, a first dependent program slice of the software program.
- the first dependent program slice describes a second code segment of the software program. The second code segment overlaps a portion of the first code segment.
- the method further includes determining, using a second pointer analysis objective, a second result from performing a second pointer analysis on the first dependent program slice, and generating a report, using the first result and the second result, indicating whether the software program satisfies a predetermined criterion.
- one or more embodiments of the invention relate to a system for analyzing a software program with pointer analysis including a processor, a repository, configured to store at least the software program, and a memory including instructions that, when executed by the processor, cause the processor to obtain a software program, and determine a first independent program slice of the software program.
- the first independent program slice describes a first code segment of the software program.
- the instructions further include determining, using a first pointer analysis objective, a first result from performing a first pointer analysis on the first independent program slice, and determining, using the first result, a first dependent program slice of the software program.
- the first dependent program slice describes a second code segment of the software program. The second code segment overlaps a portion of the first code segment.
- the instructions further include determining, using a second pointer analysis objective, a second result from performing a second pointer analysis on the first dependent program slice, and generating a report, using the first result and the second result, indicating whether the software program satisfies a predetermined criterion.
- one or more embodiments of the invention relate to a non-transitory computer readable medium including instructions that, when executed by a processor, perform a method for analyzing software with pointer analysis including obtaining a software program, and determining a first independent program slice of the software program.
- the first independent program slice describes a first code segment of the software program.
- the method further includes determining, using a first pointer analysis objective, a first result from performing a first pointer analysis on the first independent program slice, and determining, using the first result, a first dependent program slice of the software program.
- the first dependent program slice describes a second code segment of the software program. The second code segment overlaps a portion of the first code segment.
- the method further includes determining, using a second pointer analysis objective, a second result from performing a second pointer analysis on the first dependent program slice, and generating a report, using the first result and the second result, indicating whether the software program satisfies a predetermined criterion.
- FIG. 1 A and FIG. 1 B show systems in accordance with one or more embodiments of the invention.
- FIG. 2 and FIG. 3 show flowcharts in accordance with one or more embodiments of the invention.
- FIG. 4 shows an example in accordance with one or more embodiments of the invention.
- FIG. 5 A and FIG. 5 B show examples in accordance with one or more embodiments of the invention.
- FIG. 6 A and FIG. 6 B show examples in accordance with one or more embodiments of the invention.
- FIG. 7 shows a computing system in accordance with one or more embodiments of the invention.
- ordinal numbers e.g., first, second, third, etc.
- an element i.e., any noun in the application.
- the use of ordinal numbers is not to imply or create any particular ordering of the elements nor to limit any element to being only a single element unless expressly disclosed, such as by the use of the terms “before”, “after”, “single”, and other such terminology. Rather, the use of ordinal numbers is to distinguish between the elements.
- a first element is distinct from a second element, and the first element may encompass more than one element and succeed (or precede) the second element in an ordering of elements.
- embodiments of the invention include a method, a system, and a non-transitory computer readable medium for analyzing software with pointer analysis.
- one or more embodiments are directed to a method that divides a software program into various program slices according to pointer analysis objectives. The method may then perform a pointer analysis on each program slice.
- a general pointer analysis for the software program may be decomposed into a set of pointer analysis objectives with inter-dependencies among these pointer analysis objectives.
- a pointer analysis depends on the results of a previous pointer analysis.
- a distinct program slice may be computed from the software program for each pointer analysis objective, where each program slice may cover different code segments of the software program.
- FIG. 1 A shows a system in accordance with one or more embodiments of the invention.
- the system includes a computer system ( 100 ) that includes a slice engine ( 102 ), a repository ( 104 ), an evaluation engine ( 106 ), and a solution engine ( 108 ).
- the computer system ( 100 ) may be the computing system described with respect to FIG. 7 and the accompanying description below.
- the computer system ( 100 ) includes a slice engine ( 102 ).
- the slice engine ( 102 ) may be hardware and/or software that includes functionality to compute program slices ( 110 a - 110 n ) from a software program ( 116 ) relative to pointer analysis objectives ( 112 a - 112 n ).
- the software program ( 116 ) is a collection of source code used to build software applications or components. That is, the software program ( 116 ) may be a collection of computer instructions written in a human-readable programming language.
- the software program ( 116 ) may be transformed by a compiler program into binary machine code. Compiled machine code may then be executed by a processor in order to run the application generated from the software program ( 116 ).
- the program slices ( 110 a - 110 n ) may be code segments extracted from a software program ( 116 ) that may contain variables, fields, software methods, etc. For example, a program slice may be a contiguous or non-contiguous subset of the software program ( 116 ), and the program slices ( 110 a - 110 n ) may be executable or non-executable.
- a pointer analysis objective may be a particular criterion that provides a metric for performing a pointer analysis on a program slice.
- a pointer analysis objective specifies the query variables (for which points-to information may be computed) that are the focus of a pointer analysis.
- the pervasive use of pointers and references in imperative languages such as C or Java has led to a large body of research devoted to the pointer analysis problem, which aims to extract information about pointer values in programs.
- Pointer analyses may vary in their level of precision and to the extent that they consider control flow and other contextual factors. Scaling pointer analysis to large programs has been a challenge for the program analysis community. Refinement-based analysis and client-based analysis are two of the most common approaches to address this challenge. Client-based analysis limits the pointer analysis to a set of query variables, rather than exhaustively analyzing all variables. Refinement-based analysis (also known as staged analysis) may successively narrow the size of the program fragments, or program slices, being analyzed, while improving the precision of the analysis. With refinement-based analysis, each successive program slice is a subset of the previous program slice.
- a pointer analysis objective is used to generate program slices ( 110 a - 110 n ) from the software program ( 116 ).
- a pointer analysis corresponding to a pointer analysis objective ( 112 a - 112 n ) may be applied to a program slice ( 110 a - 110 n ) of a software program ( 116 ) to generate corresponding results ( 114 a - 114 n )).
- these results ( 114 a - 114 n ) may include one or more paths through the program slice ( 110 a - 110 n ).
- pointer analysis objectives ( 112 a - 112 n ) may depend on the results ( 114 a - 114 n ) generated using one or more other pointer analysis objectives ( 112 a - 112 n ).
- FIG. 1 B shows a diagram of various pointer analyses in accordance with one or more embodiments of the invention.
- an independent program slice ( 150 ) may be computed by a slice engine (( 102 ) in FIG. 1 A ) without using a result from any other program slice, while a dependent program slice ( 152 ) may be computed by the slice engine from the results (e.g., paths ( 160 )) of the independent program slice ( 150 ).
- the independent program slice ( 150 ) may include one or more entry points (e.g., entry point A ( 154 )) and one or more interest points (e.g., interest point A ( 156 )).
- entry points and interest points are statements, variables, or fields containing pointer variables.
- the interest points ( 156 , 158 ) may describe a query variable representing a starting point for a pointer analysis.
- interest point A ( 156 ) may represent the starting point for a pointer analysis of an independent program slice ( 150 )
- interest point B ( 158 ) may represent the starting point for a pointer analysis of a dependent program slice ( 152 ).
- entry point A ( 154 ) may represent an ending point for a pointer analysis.
- entry point A ( 154 ) is the ending point for a pointer analysis of an independent program slice ( 150 ).
- interest point A ( 156 ) may serve as the entry point for a dependent program slice ( 152 ), in addition to serving as the interest point A ( 156 ) of the independent program slice ( 150 ).
- an entry point ( 154 ) for a program slice ( 150 ) is where an external program ( 170 ) invokes the software program.
- the external program ( 170 ) may be a software program implemented by an operating system, for example, or any other software program that includes functionality to execute a code segment represented by the independent program slice ( 150 ) or the dependent program slice ( 152 ).
- multiple program slices may overlap at one or more overlap points.
- the overlap point ( 164 ) is both the interest point ( 156 ) of independent program slice ( 150 ), and the entry point of dependent program slice ( 152 ).
- Performing a pointer analysis on program slices ( 150 , 152 ) may result in one or more paths ( 160 , 162 ) between the interest points ( 156 , 158 ) and entry points ( 154 , 156 ) (note that ( 156 ) functions as both an interest point of the independent program slice ( 150 ) and an entry point of the dependent program slice ( 152 )).
- an entry point for a dependent program slice ( 152 ) overlaps with an interest point ( 156 ) of an independent program slice ( 150 ).
- paths ( 160 , 162 ) represent a uni-directional flow of control (or calling sequence) starting from an entry point and ending at an interest point.
- sub-path A ( 160 ) connects interest point A ( 156 ) to entry point A ( 154 ) through independent program slice ( 150 )
- sub-path B ( 162 ) connects interest point B ( 158 ) to interest point A ( 156 ) through dependent program slice ( 152 ). This is because interest point A ( 156 ) is also the entry point of the dependent program slice ( 152 )).
- an excluded path ( 168 ) may be ignored by a pointer analysis when the slice engine determines that the excluded path ( 168 ) fails to contribute toward a pointer analysis objective for the pointer analysis.
- the excluded path ( 168 ) connects two statements in different program slices ( 150 , 152 ), where neither statement represents an overlap point ( 164 ) shared between the two program slices ( 150 , 152 ). That is, in one or more embodiments of the invention, a path spanning two program slices ( 150 , 152 ) is relevant to a pointer analysis when the path includes an overlap point ( 164 ) shared between the two program slices ( 150 , 152 ).
- a points-to set (not shown) is a set of possible object-creation sites (i.e., program statements that declare, instantiate, and/or initialize objects) for objects that may be referenced by a variable set, where the points-to set is computed via a pointer analysis. That is, a points-to set computed for a particular variable set subsumes individual points-to sets for each variable in the variable set, each identifying possible object-creation sites for objects that may be referenced by the corresponding variable.
- the points-to set includes points-to information for the query variables specified by the interest points ( 156 , 158 ) of a program slice ( 150 , 152 ).
- the slice engine ( 102 ) includes functionality to compute a program slice ( 110 a - 110 n ) subtractively (i.e., by removing code from the software program ( 116 )) and/or additively.
- the slice engine ( 102 ) includes functionality to remove code related to sub-paths that do not contribute to the pointer analysis objective ( 112 a - 112 n ).
- the slice engine ( 102 ) may implement copy propagation, redundant code (including dead code, unreachable code, etc.) elimination techniques, and/or equivalent code factoring to compact a program slice ( 110 a - 110 n ).
- the slice engine ( 102 ) identifies removable code, at least in part, by building a value flow graph including the query variables of a pointer analysis objective ( 112 a - 112 n ), formal and actual arguments, return statements, object-creation sites, and/or receiver objects of method invocations at call sites.
- the value flow graph may be utilized to compute equivalence classes between variables in order to remove redundancy.
- the slice engine ( 102 ) performs a context-insensitive pointer analysis and/or a context-sensitive pointer analysis.
- a context-sensitive pointer analysis may be based, in part, on the control flow (e.g., as represented in a call graph).
- the evaluation engine ( 106 ) may be hardware and/or software that includes functionality to examine the results ( 114 a - 114 n ) generated from the program slices ( 110 a - 110 n ) using pointer analysis objectives ( 112 a - 112 n ).
- the evaluation engine ( 106 ) may include functionality to generate a report ( 118 ) indicating whether the software program ( 116 ) satisfies a predetermined criterion.
- the report ( 118 ) also indicates specific results ( 114 a - 114 n ) that are particularly relevant to the pointer analysis objectives ( 112 a - 112 n ) and the predetermined criterion.
- the report ( 118 ) may highlight specific interest points and entry points that are particularly relevant to the analysis objectives, and/or may relate to program defects and areas desiring optimization.
- results ( 114 a - 114 n ) correspond to defects in the software program ( 116 ) and/or opportunities to optimize the software program ( 116 ).
- a solution engine ( 108 ) proposes corrections to the program defects identified by the evaluation engine ( 106 ) and proposes ways to exploit the opportunities for optimization identified by the evaluation engine ( 106 ).
- the solution engine ( 108 ) may propose a correction of a defect in the software program ( 116 ) by adding a statement to check for a condition and generate an error if that condition is not satisfied.
- the evaluation engine ( 106 ) and solution engine ( 108 ) may operate on each program slice ( 110 a - 110 n ) individually and/or may operate on the software program ( 116 ) as a whole.
- the repository ( 104 ) is any type of storage unit and/or device (e.g., a file system, database, collection of tables, or any other storage mechanism) for storing data. Further, the repository ( 104 ) may include multiple different storage units and/or devices. The multiple different storage units and/or devices may or may not be of the same type or located at the same physical site. In one or more embodiments of the invention, the repository ( 104 ) stores the software program ( 116 ) and any other data relevant to the operation of the slice engine ( 102 ), evaluation engine ( 106 ) and/or solution engine ( 108 ).
- the software program ( 116 ) stores the software program ( 116 ) and any other data relevant to the operation of the slice engine ( 102 ), evaluation engine ( 106 ) and/or solution engine ( 108 ).
- FIG. 1 A shows a configuration of components
- other configurations may be used without departing from the scope of the invention.
- various components may be combined to create a single component.
- the functionality performed by a single component may be performed by two or more components.
- the invention is not limited by the system shown in FIG. 1 A .
- FIG. 2 and FIG. 3 show flowcharts in accordance with one or more embodiments of the invention. While the various steps in these flowcharts are presented and described sequentially, one of ordinary skill in the art will appreciate that some or all of the steps may be executed in different orders, may be combined or omitted, and some or all of the steps may be executed in parallel. Furthermore, the steps may be performed actively or passively. For example, some steps may be performed using polling or be interrupt driven in accordance with one or more embodiments of the invention. By way of an example, determination steps may not require a processor to process an instruction unless an interrupt is received to signify that condition exists in accordance with one or more embodiments of the invention. As another example, determination steps may be performed by performing a test, such as checking a data value to test whether the value is consistent with the tested condition in accordance with one or more embodiments of the invention.
- a test such as checking a data value to test whether the value is consistent with the tested condition in accordance with one or more embodiments of the invention.
- FIG. 2 shows a flowchart describing a method for analyzing a software program with a pointer analysis, in accordance with one or more embodiments of the invention.
- One or more steps in FIG. 2 may be executed by components of the computer system ( 100 ) (discussed in reference to FIG. 1 A ).
- Step 200 a software program is obtained.
- the software program may be obtained from a repository.
- Step 202 one or more independent program slices of a software program are determined in accordance with one or more embodiments.
- the software program from Step 200 may be divided into program slices.
- these program slices may provide discrete components that may be analyzed faster than if an analysis were performed on the entire software program.
- one or more dependent program slices of the software program are determined using a result from performing a pointer analysis on an independent program slice in accordance with one or more embodiments.
- the independent program slices in Step 204 may be determined without performing any previous pointer analyses
- the dependent program slices may be determined from the results of one or more previous pointer analyses.
- a particular path through an independent program slice may provide an input in determining a portion of the software program for a dependent program slice.
- a slice engine may determine which program statements from the software program in Step 200 are included in a particular program slice, such as which program statements in the software program are excluded from the program slices.
- the slice engine uses rules, or conditions, to determine the dependent program slices.
- the rules may be expressed in an “if-then” format.
- an evaluation engine may determine a path through each program slice according to a pointer analysis objective.
- the path is determined via a context-insensitive pointer analysis.
- a context-sensitive pointer analysis is performed using the program slice in order to compute a points-to set.
- the context-sensitive analysis may construct and refine a call graph, by determining whether a method is reachable in the context of various execution sequences, in order to compute the points-to set.
- the analysis may consider the calling context when analyzing the target of a method call.
- the context used for a given method may be based on the method's receiver object as well as the object that allocates the receiver object.
- a report is generated regarding an analysis of various results (e.g., paths) in accordance with one or more embodiments.
- the report may analyze whether the results from Step 206 satisfy a predetermined criterion.
- the report may be presented in a display device, such as in a graphical user interface (GUI).
- GUI graphical user interface
- FIG. 3 shows a flowchart describing, in more detail than FIG. 2 , the method for analyzing a software program with a pointer analysis, in accordance with one or more embodiments of the invention.
- One or more steps in FIG. 3 may be executed by components of the computer system ( 100 ) (discussed in reference to FIG. 1 A ).
- Step 300 a software program is obtained in accordance with one or more embodiments. Step 300 may be performed similarly to Step 200 .
- one or more pointer analysis objectives are obtained in accordance with one or more embodiments.
- pointer analysis objectives may be obtained from a user as part of a desired pointer analysis for the software program from Step 300 .
- the pointer analysis objects may be partially ordered such that a given pointer analysis objective may depend on other pointer analysis objectives in accordance with one or more embodiments (for example, see FIG. 4 ).
- the pointer analysis objectives are components of a larger pointer analysis objective.
- an initial pointer analysis objective is selected.
- a pointer analysis object from the pointer analysis objectives from Step 302 may be selected automatically by a computing system
- a software application may select the initial pointer analysis objective using a software algorithm, e.g., a pseudorandom algorithm or in an iterative manner.
- the user may select the initial pointer analysis objective from a set of pointer analysis objectives.
- a software program may obtain a selection of the initial pointer analysis objective from the user, e.g., with a graphical user interface.
- Step 306 an independent program slice of the software program is determined using the initial pointer analysis objective in accordance with one or more embodiments.
- the independent program slice initially includes one or more interest points.
- the interest points may be obtained from the initial pointer analysis objective in Step 304 .
- the independent program slice initially contains variables corresponding to one or more interest points and the methods that define and/or use these variables.
- the independent program slice is extended to include additional variables, fields, and/or methods of the software program.
- the independent program slice may be extended based on the following information in the program slice: types and constructor methods of objects that are created; the source of an assignment, if the destination of the assignment is already in the slice; assignment casts; and the source of a load operation, if the result of the load operation is already in the slice.
- the independent program slice may be extended to include statements (e.g., method invocations), variables and fields in the call graph starting backwards from the interest points, until an entry point is encountered.
- statements e.g., method invocations
- variables e.g., variables and fields in the call graph starting backwards from the interest points, until an entry point is encountered.
- Any technique for constructing or extending a program slice relative to a pointer analysis objective may be used, where the initial pointer analysis objective defines the goals of a pointer analysis.
- the goals of a pointer analysis are represented as query variables.
- a path is determined from an interest point to an entry point through an independent program slice in accordance with one or more embodiments.
- an evaluation engine may trace a calling path backwards from an interest point and ending at an entry point.
- the evaluation engine may then compute points-to sets for the pointer variables encountered along this path.
- the pointer analysis traces the dataflow of the various pointer variables backwards by the assignment relation, starting at an interest point, and ending at an entry point.
- the entry points and interest points connected by such paths are subsequently used by a slicing algorithm in determining the composition of subsequent dependent program slices.
- Step 310 the next pointer analysis objective (also called “selected pointer analysis objective”) is selected in accordance with one or more embodiments.
- a pointer analysis objective A depends on one or more other pointer analysis objectives. Therefore, pointer analysis objective A may selected after the pointer analyses on which pointer analysis objective A depends have been performed. For example, see FIG. 4 . and the accompanying description.
- a dependent program slice of the software program is determined using a selected pointer analysis objective and results from performing pointer analyses on program slices in accordance with one or more embodiments.
- paths resulting from performing such pointer analyses determine the overlap points between entry points of the dependent program slice and interest points of these other (independent or dependent) program slices upon which the dependent program slice depends.
- one or more results (e.g., paths) from the dependent program slice may be determined by performing a pointer analysis on the dependent program slice relative to the pointer analysis objective selected in Step 310 .
- Step 316 If there are additional pointer analysis objectives (Step 316 ), then continue with Step 310 to select the next pointer analysis objective.
- a report is generated.
- the report identifies defects and/or opportunities to improve or optimize the software program.
- the defects and/or opportunities to improve or optimize the software program relate to the presence or absence of specific results (e.g., paths between entry points and interest points in one or more program slices).
- the report may propose solutions that remove program defects and/or exploit the identified improvement or optimization opportunities.
- One example of a defect may be an interest point that may potentially incur a security vulnerability when that interest point is reached by certain paths. This defect may be solved by inserting an appropriate permission, authentication, or other type of security check on the paths leading to the vulnerable interest point.
- Deep security analysis is an example of a client pointer analysis objective that is not practically analyzable on very large software programs (e.g., programs containing over 300,000 variables) using previous techniques, due to performance limitations. Such security analyses are desired to reduce the number of potential security vulnerabilities in large software programs.
- FIG. 4 illustrates the dependencies of program slices ( 402 , 408 , 414 , 420 ) on the results ( 406 , 412 , 418 , 424 ) generated by applying pointer analyses to other program slices ( 402 , 408 , 414 , 420 ).
- program slices ( 402 , 408 , 414 , 420 ) are analyzed in an iterative manner, relative to their corresponding pointer analysis objectives ( 404 , 410 , 416 , 422 ), generating results ( 406 , 412 , 418 , 424 ) for each program slice ( 402 , 408 , 414 , 420 ).
- program slice N+1 ( 420 ) depends on two results ( 406 , 412 , 418 , 424 ): the result from program slice N ( 414 ) and the result from program slice B ( 408 ).
- a series of smaller pointer analyses are performed on a series of orthogonal program slices ( 402 , 408 , 414 , 420 ).
- This approach involves dividing the overall pointer analysis objective into individual pointer analysis objectives ( 404 , 410 , 416 , 422 ), where the pointer analysis objectives ( 404 , 410 , 416 , 422 ) are partially ordered such that a given “dependent” pointer analysis objective ( 404 , 410 , 416 , 422 ) may depend on the results ( 406 , 412 , 418 , 424 ) corresponding to one or more other pointer analysis objectives ( 404 , 410 , 416 , 422 ).
- FIG. 5 A illustrates the concepts of independent program slices ( 530 ), dependent program slices ( 532 ), and paths ( 540 , 542 ) in the context of a simple security use case, in accordance with one or more embodiments of the invention.
- the following situation arises frequently in security analyses.
- the analysis involves checking whether the security-sensitive method uses potentially “tainted” data (or data passed in to a software program by an application). This alone is insufficient, since if there has been no elevation of privileges, such behavior is safe.
- privilege elevation e.g., a call to the Java method doPrivileged
- execution paths that accept potentially tainted data and then access security-sensitive resources without elevating privileges on that path are not relevant to the security analysis, since without the privilege elevation, there is no actual security vulnerability.
- an independent program slice ( 530 ) includes a Public Entry method ( 534 ), i.e., the entry point where the software program is invoked by an external program ( 550 ), and an Elevate statement ( 536 ) (an interest point) that elevates a software program's access privileges.
- the Elevate statement ( 536 ) represents the starting point for a pointer analysis within the independent program slice ( 530 ).
- the Public Entry method ( 534 ) represents an ending point for the pointer analysis within the independent program slice ( 530 ).
- the dependent program slice ( 532 ) includes the Elevate statement ( 536 ) (the entry point) and a Security Sensitive Method ( 538 ) (an interest point) that accesses one or more security-sensitive resources.
- the Security Sensitive Method ( 538 ) represents the starting point for a pointer analysis within the dependent program slice ( 532 ).
- the Elevate statement ( 536 ) represents an ending point for the pointer analysis within the dependent program slice ( 532 ).
- the Elevate statement ( 536 ) is an overlap point ( 544 ) between the independent program slice ( 530 ) and the dependent program slice ( 532 ). That is, the Elevate statement ( 536 ) is both the interest point of the independent program slice ( 530 ) and the entry point of the dependent program slice ( 532 ).
- performing a pointer analysis on the independent program slice ( 530 ) generates Path D ( 540 ), between the Elevate statement ( 536 ) (the interest point) and the Public Entry method ( 534 ).
- Performing a pointer analysis on the dependent program slice ( 532 ) generates Path E ( 542 ), between the Security Sensitive Method ( 538 ) (the interest point) and the Elevate statement ( 536 ) (the entry point for the dependent program slice ( 532 )).
- the Excluded Path ( 548 ) between the Security Sensitive Method ( 538 ) of the dependent program slice ( 532 ) and the Public Entry method ( 534 ) of the independent program slice ( 530 ) is irrelevant to the security use case, since there is no elevation of privileges, and a security vulnerability arises in the context of elevated privilege.
- FIG. 5 B illustrates an escape analysis use case similar to the security use case discussed in the context of FIG. 5 A , in accordance with one or more embodiments of the invention.
- escape analysis With escape analysis, one is interested in whether potentially sensitive data returned by a function or method “escapes” for use by other functions or methods before that sensitive data is “declassified.” The escape analysis involves checking whether a security-sensitive method uses potentially sensitive data that has not been properly declassified. Escape analysis aims to identify paths that do not have proper declassification and, thus, removes paths that do declassify the potentially sensitive data before its use.
- the Public Entry method 564
- the Security Sensitive Method 568
- the independent program slice ( 560 ) includes a Public Entry method ( 564 ), i.e., the interest point where the software program is invoked by an external program ( 580 ) and a Declassify statement ( 566 ) (an entry point) that removes or transforms any sensitive aspects of data.
- the Public Entry method ( 564 ) is determined to be the independent program slice's ( 560 ) interest point based on a pointer analysis objective and represents a starting point for the pointer analysis within the independent program slice ( 560 ).
- the Declassify statement ( 566 ) is determined to be the independent program slice's ( 560 ) entry point based on a pointer analysis objective and represents the ending point for a pointer analysis within the independent program slice ( 560 ).
- the dependent program slice ( 562 ) includes the Declassify statement ( 566 ) (an interest point) and the Security Sensitive Method ( 568 ) (an entry point).
- the Security Sensitive Method ( 568 ) is determined to be the dependent program slice's ( 562 ) entry point based on a pointer analysis objective and represents the ending point for a pointer analysis within the dependent program slice ( 562 ).
- the Declassify statement ( 566 ) is determined to be the dependent program slice's ( 562 ) interest point based on a pointer analysis objective and represents a starting point for the pointer analysis within the dependent program slice ( 562 ).
- the Declassify statement ( 566 ) is the overlap point ( 574 ) between the independent program slice ( 560 ) and the dependent program slice ( 562 ). That is, the Declassify statement ( 566 ) is both the entry point of the independent program slice ( 560 ) and the interest point of the dependent program slice ( 562 ).
- Excluded Path G ( 570 ) between the Declassify statement ( 566 ) (the entry point) and the Public Entry method ( 564 ) (the interest point for the independent program slice ( 560 )) is excluded from the independent program slice ( 560 ).
- Excluded Path H ( 572 ) between the Security Sensitive Method ( 568 ) (the entry point) and the Declassify statement ( 566 ) (the interest point for the dependent program slice ( 562 )) is excluded from the dependent program slice ( 562 ).
- Excluded Path G ( 570 ) and Excluded Path H ( 572 ) are excluded because the Declassify statement ( 566 ) occurs before the potentially security-sensitive data reaches the Public Entry method ( 564 ) and, therefore, the potential security risk has been averted. Therefore, only Path I ( 576 ) is relevant to the escape analysis is between the Security Sensitive Method ( 568 ) of the dependent program slice ( 562 ) and the Public Entry method ( 564 ) of the independent program slice ( 560 ), since the Public Entry method ( 564 ) has access to the un-declassified sensitive data via Path I ( 576 ).
- Additional use cases may include checking for memory leaks, checking for circular references, and virtual calls resolution, among others.
- FIGS. 6 A and 6 B illustrate an example in accordance with one or more embodiments of the invention.
- FIG. 6 A shows a small program, whose corresponding program slices and paths are shown in FIG. 6 B .
- the class Example ( 602 ) defines a local variable field of type T ( 604 ) and a public method entry ( 606 ) whose input argument data is also of type T.
- the method entry ( 606 ) sets the value of field to be the value of input argument data and then calls the private method interim ( 610 ) with the potentially tainted argument data.
- the class Example ( 602 ) has another public method start ( 612 ) which calls the private method elevate ( 614 ).
- the private method interim ( 616 ) accepts an input argument t of type T and calls the private method goAhead ( 618 ).
- the private method elevate ( 620 ) calls the private method goAhead ( 622 ) with the local variable field.
- the private method goAhead ( 624 ) accepts an input argument t of type T and calls security-sensitive-method ( 626 ) (which is a method of the type T).
- the potentially tainted value data may be passed from the public method entry ( 606 ) to the private method interim ( 610 ) and then to the private method goAhead ( 618 ) and finally to the private method security-sensitive-method ( 626 ), but there is no privilege elevation on this path.
- an application may invoke the public method start ( 612 ) which calls the private method elevate ( 614 ) which then calls the private method goAhead ( 622 ) with the potentially tainted value from the local variable field and then finally invokes the private method security-sensitive-method ( 626 ). In this latter case, the potentially tainted data is passed with privilege elevation.
- a single, backward program slice starting from security-sensitive-method ( 626 ) would include the method goAhead ( 624 ).
- the slicing process would continue backward and include the methods elevate ( 620 ) interim ( 616 ), start ( 612 ), and entry ( 606 ).
- the method interim ( 616 ) would be included in the program slice since when it is processed by the slicing algorithm, a call to elevate ( 620 ) prior to invoking interim ( 616 ) cannot be ruled out.
- generating an independent program slice traces the flow of the potentially tainted data to the local variable field ( 608 ) and its flow to the call to the method goAhead ( 622 ) inside the method elevate ( 620 ).
- Generating the independent program slice will also trace the flow of the potentially tainted data to the method interim ( 610 ).
- generating a dependent program slice traces the flow from the method elevate ( 620 ) to the method security-sensitive-method ( 626 ) and will therefore also include the method goAhead ( 624 ).
- the method elevate ( 614 , 620 ) represents the overlap point between the independent program slice and the dependent program slice.
- the method goAhead ( 624 ) will be present in the dependent program slice, but the irrelevant sub-path from interim ( 616 ) to goAhead ( 624 ) (and then continuing to security-sensitive-method ( 626 )) will be excluded. This excluded sub-path is illustrated in FIG. 6 B .
- FIG. 6 B illustrates an independent program slice ( 650 ), a dependent program slice ( 652 ) and paths ( 682 , 684 ) corresponding to the software program shown in FIG. 6 A , in accordance with one or more embodiments of the invention.
- the independent program slice ( 650 ) includes an input variable data ( 654 ) to a public method called entry ( 656 ), where the software program may be invoked by an external program ( 690 ).
- the independent program slice ( 650 ) also includes an internal method called interim ( 658 ) and an elevate statement ( 662 ) (an interest point).
- the independent program slice ( 650 ) also includes another public method called start ( 660 ), which invokes the elevate statement ( 662 ) using a potentially tainted value.
- the elevate statement ( 662 ) represents the starting point for a pointer analysis within the independent program slice ( 650 ).
- the input variable data ( 654 ) is an entry point, representing an ending point for the pointer analysis within the independent program slice ( 650 ).
- the dependent program slice ( 652 ) includes the elevate statement ( 662 ) (the entry point), an internal method called goAhead ( 664 ), and an internal method called security-sensitive-method ( 666 ) (an interest point).
- the security-sensitive-method ( 666 ) represents the starting point for a pointer analysis within the dependent program slice ( 652 ).
- the elevate statement ( 662 ) represents an ending point for the pointer analysis within the dependent program slice ( 652 ).
- the elevate statement ( 662 ) is the overlap point ( 668 ) between the independent program slice ( 650 ) and the dependent program slice ( 652 ). That is, the elevate statement ( 662 ) is both the interest point of the independent program slice ( 650 ) and the entry point of the dependent program slice ( 652 ).
- Performing a pointer analysis on the independent program slice ( 650 ) generates path U ( 682 ) consisting of sub-path P ( 672 ), sub-path Q ( 674 ), and sub-path R ( 676 ).
- Sub-path P ( 672 ) connects the entry method ( 656 ) to the input variable data ( 654 )
- sub-path Q ( 674 ) connects the start method ( 660 ) to the entry method ( 656 )
- sub-path R ( 676 ) connects the elevate statement ( 662 ) to the start method ( 660 ).
- Performing a pointer analysis on the dependent program slice ( 652 ) generates path V ( 684 ) consisting of sub-path S ( 678 ) and sub-path T ( 680 ).
- Sub-path S ( 678 ) connects the goAhead method ( 664 ) to the elevate statement ( 662 ) (the entry point of the dependent program slice ( 652 )), and sub-path T ( 680 ) connects security-sensitive-method ( 666 ) (the interest point) to the goAhead method ( 664 ).
- Excluded Sub-Path X ( 686 ) between the goAhead method ( 664 ) and the interim method ( 658 ) and Excluded Sub-path Y ( 688 ) between the interim method ( 658 ) and the entry method ( 656 ) are irrelevant to the pointer analysis in this security use case, since there is no elevation of privileges on these sub-paths.
- Embodiments of the invention may be implemented on a computing system ( 700 ). Any combination of mobile, desktop, server, embedded, or other types of hardware may be used.
- the computing system ( 700 ) may include one or more computer processor(s) ( 702 ), associated memory ( 704 ) (e.g., random access memory (RAM), cache memory, flash memory, etc.), one or more storage device(s) ( 706 ) (e.g., a hard disk, an optical drive such as a compact disk (CD) drive or digital versatile disk (DVD) drive, a flash memory stick, etc.), and numerous other elements and functionalities.
- the computer processor(s) ( 702 ) may be an integrated circuit for processing instructions.
- the computer processor(s) may be one or more cores, or micro-cores of a processor.
- a computer processor ( 702 ) is any hardware capable of, at least in part, executing sequences of instructions (e.g., the instructions of a computer program) in a computing system ( 700 ).
- a computer processor ( 702 ) is a collection of electronic circuitry capable of implementing various actions (e.g., arithmetic, Boolean logic, move data, etc.) in order to carry out instructions (e.g., write to a variable, read a value, etc.).
- a processor may be a microprocessor fabricated, at least in part using a semiconducting material, as one or more integrated circuits.
- the computing system ( 700 ) may also include one or more input device(s) ( 710 ), such as a touchscreen, keyboard, mouse, microphone, touchpad, electronic pen, or any other type of input device. Further, the computing system ( 700 ) may include one or more output device(s) ( 708 ), such as a screen (e.g., a liquid crystal display (LCD), a plasma display, touchscreen, cathode ray tube (CRT) monitor, projector, or other display device), a printer, external storage, or any other output device. One or more of the output device(s) may be the same or different from the input device(s).
- input device(s) such as a touchscreen, keyboard, mouse, microphone, touchpad, electronic pen, or any other type of input device.
- the computing system ( 700 ) may include one or more output device(s) ( 708 ), such as a screen (e.g., a liquid crystal display (LCD), a plasma display, touchscreen, cathode ray tube (CRT) monitor,
- the computing system ( 700 ) may be connected to a network ( 712 ) (e.g., a local area network (LAN), a wide area network (WAN) such as the Internet, mobile network, or any other type of network) via a network interface connection (not shown).
- the input and output device(s) may be locally or remotely (e.g., via the network ( 712 )) connected to the computer processor(s) ( 702 ), memory ( 704 ), and storage device(s) ( 706 ).
- a network e.g., a local area network (LAN), a wide area network (WAN) such as the Internet, mobile network, or any other type of network
- the input and output device(s) may be locally or remotely (e.g., via the network ( 712 )) connected to the computer processor(s) ( 702 ), memory ( 704 ), and storage device(s) ( 706 ).
- Software instructions in the form of computer readable program code to perform embodiments of the invention may be stored, in whole or in part, temporarily or permanently, on a non-transitory computer readable medium such as a CD, DVD, storage device, a diskette, a tape, flash memory, physical memory, or any other computer readable storage medium.
- the software instructions may correspond to computer readable program code that, when executed by a processor(s), is configured to perform embodiments of the invention.
- one or more elements of the aforementioned computing system ( 700 ) may be located at a remote location and connected to the other elements over a network ( 712 ). Further, embodiments of the invention may be implemented on a distributed system having a plurality of nodes, where each portion of the invention may be located on a different node within the distributed system.
- the node corresponds to a distinct computing device.
- the node may correspond to a computer processor with associated physical memory.
- the node may alternatively correspond to a computer processor or micro-core of a computer processor with shared memory and/or resources.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
Description
Claims (14)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/757,684 US11593249B2 (en) | 2015-12-23 | 2015-12-23 | Scalable points-to analysis via multiple slicing |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/757,684 US11593249B2 (en) | 2015-12-23 | 2015-12-23 | Scalable points-to analysis via multiple slicing |
Publications (2)
Publication Number | Publication Date |
---|---|
US20170185504A1 US20170185504A1 (en) | 2017-06-29 |
US11593249B2 true US11593249B2 (en) | 2023-02-28 |
Family
ID=59087840
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US14/757,684 Active 2037-04-19 US11593249B2 (en) | 2015-12-23 | 2015-12-23 | Scalable points-to analysis via multiple slicing |
Country Status (1)
Country | Link |
---|---|
US (1) | US11593249B2 (en) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10296314B2 (en) * | 2016-11-01 | 2019-05-21 | Facebook, Inc. | Detecting and remedying memory leaks caused by object reference cycles |
US10594574B2 (en) * | 2016-11-07 | 2020-03-17 | Hewlett Packard Enterprise Development Lp | Middlebox modeling |
US12190131B2 (en) * | 2021-03-25 | 2025-01-07 | Tata Consultancy Services Limited | Method and system for function call and variable access based relaxed backward slicing |
Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020129343A1 (en) * | 2000-12-28 | 2002-09-12 | International Business Machines Corporation | Estimation of object lifetime using static analysis |
US20040123273A1 (en) * | 2002-10-01 | 2004-06-24 | Reiner Hammerich | Validating programs |
US20090006863A1 (en) * | 2007-06-28 | 2009-01-01 | Hitachi, Ltd. | Storage system comprising encryption function and data guarantee method |
US20090037690A1 (en) * | 2007-08-03 | 2009-02-05 | Nema Labs Ab | Dynamic Pointer Disambiguation |
US20090113550A1 (en) * | 2007-10-26 | 2009-04-30 | Microsoft Corporation | Automatic Filter Generation and Generalization |
US20090249307A1 (en) * | 2008-03-26 | 2009-10-01 | Kabushiki Kaisha Toshiba | Program analysis apparatus, program analysis method, and program storage medium |
US20100083240A1 (en) * | 2006-10-19 | 2010-04-01 | Checkmarx Ltd | Locating security vulnerabilities in source code |
US20110258610A1 (en) * | 2010-04-16 | 2011-10-20 | International Business Machines Corporation | Optimizing performance of integrity monitoring |
US8335317B2 (en) * | 2004-11-11 | 2012-12-18 | Certicom Corp. | Secure interface for versatile key derivation function support |
US20140130020A1 (en) * | 2012-09-28 | 2014-05-08 | Coverity, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
US20140208430A1 (en) * | 2013-01-23 | 2014-07-24 | International Business Machines Corporation | Mitigating Security Risks Via Code Movement |
US8930927B2 (en) * | 2007-06-04 | 2015-01-06 | International Business Machines Corporation | Diagnosing aliasing violations in a partial program view |
US20150186114A1 (en) * | 2013-12-27 | 2015-07-02 | Symantec Corporation | Systems and methods for injecting code into an application |
US20160246992A1 (en) * | 2015-02-24 | 2016-08-25 | International Business Machines Corporation | Fine-Grained User Control Over Usages Of Sensitive System Resources Having Private Data With Applications In Privacy Enforcement |
US9471514B1 (en) * | 2012-08-23 | 2016-10-18 | Palo Alto Networks, Inc. | Mitigation of cyber attacks by pointer obfuscation |
US20170364698A1 (en) * | 2015-06-02 | 2017-12-21 | ALTR Solutions, Inc. | Fragmenting data for the purposes of persistent storage across multiple immutable data structures |
US9852757B2 (en) * | 2014-04-24 | 2017-12-26 | Marvell International Ltd. | Systems and methods for decoding using run-length limited (RLL) codes |
-
2015
- 2015-12-23 US US14/757,684 patent/US11593249B2/en active Active
Patent Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020129343A1 (en) * | 2000-12-28 | 2002-09-12 | International Business Machines Corporation | Estimation of object lifetime using static analysis |
US20040123273A1 (en) * | 2002-10-01 | 2004-06-24 | Reiner Hammerich | Validating programs |
US8335317B2 (en) * | 2004-11-11 | 2012-12-18 | Certicom Corp. | Secure interface for versatile key derivation function support |
US20100083240A1 (en) * | 2006-10-19 | 2010-04-01 | Checkmarx Ltd | Locating security vulnerabilities in source code |
US8930927B2 (en) * | 2007-06-04 | 2015-01-06 | International Business Machines Corporation | Diagnosing aliasing violations in a partial program view |
US20090006863A1 (en) * | 2007-06-28 | 2009-01-01 | Hitachi, Ltd. | Storage system comprising encryption function and data guarantee method |
US20090037690A1 (en) * | 2007-08-03 | 2009-02-05 | Nema Labs Ab | Dynamic Pointer Disambiguation |
US20090113550A1 (en) * | 2007-10-26 | 2009-04-30 | Microsoft Corporation | Automatic Filter Generation and Generalization |
US20090249307A1 (en) * | 2008-03-26 | 2009-10-01 | Kabushiki Kaisha Toshiba | Program analysis apparatus, program analysis method, and program storage medium |
US20110258610A1 (en) * | 2010-04-16 | 2011-10-20 | International Business Machines Corporation | Optimizing performance of integrity monitoring |
US9471514B1 (en) * | 2012-08-23 | 2016-10-18 | Palo Alto Networks, Inc. | Mitigation of cyber attacks by pointer obfuscation |
US20140130020A1 (en) * | 2012-09-28 | 2014-05-08 | Coverity, Inc. | Static analysis of computer code to determine impact of change to a code component upon a dependent code component |
US20140208430A1 (en) * | 2013-01-23 | 2014-07-24 | International Business Machines Corporation | Mitigating Security Risks Via Code Movement |
US20150186114A1 (en) * | 2013-12-27 | 2015-07-02 | Symantec Corporation | Systems and methods for injecting code into an application |
US9852757B2 (en) * | 2014-04-24 | 2017-12-26 | Marvell International Ltd. | Systems and methods for decoding using run-length limited (RLL) codes |
US20160246992A1 (en) * | 2015-02-24 | 2016-08-25 | International Business Machines Corporation | Fine-Grained User Control Over Usages Of Sensitive System Resources Having Private Data With Applications In Privacy Enforcement |
US20170364698A1 (en) * | 2015-06-02 | 2017-12-21 | ALTR Solutions, Inc. | Fragmenting data for the purposes of persistent storage across multiple immutable data structures |
Non-Patent Citations (7)
Title |
---|
Allen, N., et al., "Staged Points-to Analysis for Large Code Bases", LNCS vol. 9031, Apr. 11-17, 2015, 20 pages. |
Bravenboer, M., et al., "Strictly Declarative Specification of Sophisticated Points-to Analyses", In Proceeding of th e24st ACM SIGPLAN Conference on Object Oriented Programming Systems Languages and Applications, OOPSLA 09, Oct. 25-29, 2009, 19 pages. |
Smaragdakis, Y., et al., "Set-Based Processing for Points-to Analysis", In ACM SIGPLAN International Conference on Object Orientated Programming Systems Languages and Applications, Oct. 29-31, 2013, 17 pages. |
Sridharan, M., et al, "Refinement-Based Context-Sensitive Points-to Analysis for Java", In Proceedings of the 2006 ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI '06, Mar. 31, 2006, 17 pages. |
Sridharan, M., et al., "Demand-Driven Points-to Analysis for Java", OOPSLA'05, Oct. 16-20, 2005, 18 pages. |
Yan, D., et al., "Demand-Driven Context-Sensitive Alias Analysis for Java", ISSTA '11, Jul. 17-21, 2011, 11 pages. |
Zheng, X., Rugina, R., "Demand-Driven Alias Analysis for C", POPL'08, Jan. 7-12, 2008, 12 pages. |
Also Published As
Publication number | Publication date |
---|---|
US20170185504A1 (en) | 2017-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11983094B2 (en) | Software diagnostic context selection and use | |
US20210149788A1 (en) | Software diagnosis using transparent decompilation | |
US11650905B2 (en) | Testing source code changes | |
US7975257B2 (en) | Iterative static and dynamic software analysis | |
US8893102B2 (en) | Method and system for performing backward-driven path-sensitive dataflow analysis | |
US8516443B2 (en) | Context-sensitive analysis framework using value flows | |
Ravitch et al. | Multi-app security analysis with fuse: Statically detecting android app collusion | |
US9507943B1 (en) | Analysis tool for data security | |
He et al. | Sofi: Reflection-augmented fuzzing for javascript engines | |
US8225287B2 (en) | Method for testing a system | |
Backes et al. | R-droid: Leveraging android app analysis with static slice optimization | |
US9336128B2 (en) | Method and system for code analysis using symbolic types | |
US11900080B2 (en) | Software development autocreated suggestion provenance | |
US10296311B2 (en) | Finding uninitialized variables outside the local scope | |
US9158923B2 (en) | Mitigating security risks via code movement | |
US20150143342A1 (en) | Functional validation of software | |
US11593249B2 (en) | Scalable points-to analysis via multiple slicing | |
US9367307B2 (en) | Staged points-to analysis for large code bases | |
US9075921B2 (en) | Error simulation | |
Chahar et al. | Code analysis for software and system security using open source tools | |
Lawall et al. | WYSIWIB: exploiting fine‐grained program structure in a scriptable API‐usage protocol‐finding process | |
EP3506136B1 (en) | Detecting stack cookie utilization in a binary software component using binary static analysis | |
Furda et al. | A practical approach for detecting multi-tenancy data interference | |
Hermann et al. | Getting to know you: Towards a capability model for java | |
Zhang et al. | Lightweight automated detection of unsafe information leakage via exceptions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: ORACLE INTERNATIONAL CORPORATION, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:KRISHNAN, PADMANABHAN;RAMESH, RAGHAVENDRA KAGALAVADI;REEL/FRAME:037736/0499 Effective date: 20151219 |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: FINAL REJECTION MAILED |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: NON FINAL ACTION MAILED |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: FINAL REJECTION MAILED |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: FINAL REJECTION MAILED |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: NON FINAL ACTION MAILED |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: FINAL REJECTION MAILED |
|
STCV | Information on status: appeal procedure |
Free format text: NOTICE OF APPEAL FILED |
|
STCV | Information on status: appeal procedure |
Free format text: APPEAL BRIEF (OR SUPPLEMENTAL BRIEF) ENTERED AND FORWARDED TO EXAMINER |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |