We compute the set of possible call-targets for each dynamic call, and add them as CALL edges to the graph, based on call.methodFullName, method.name and method.signature, the inheritance hierarchy and the AST of typedecls and methods.
This pass intentionally ignores the vtable mechanism based on BINDING nodes but does check for an existing call edge before adding one. It assumes non-circular inheritance, on pain of endless recursion / stack overflow.
Based on the algorithm by Jang, Dongseok & Tatlock, Zachary & Lerner, Sorin. (2014). SAFEDISPATCH: Securing C++ Virtual Calls from Memory Corruption Attacks. 10.14722/ndss.2014.23287.
Attributes
- Companion
- object
- Graph
-
- Supertypes
-
class CpgPassclass ForkJoinParallelCpgPass[AnyRef]class NewStyleCpgPassBase[AnyRef]trait CpgPassBaseclass Objecttrait Matchableclass AnyShow all
Members list
Type members
Inherited types
Attributes
- Inherited from:
- NewStyleCpgPassBase
Value members
Concrete methods
Main method of enhancement - to be implemented by child class
Main method of enhancement - to be implemented by child class
Attributes
- Definition Classes
-
CpgPass
Inherited methods
Attributes
- Definition Classes
-
NewStyleCpgPassBase -> CpgPassBase
- Inherited from:
- NewStyleCpgPassBase
Attributes
- Definition Classes
-
ForkJoinParallelCpgPass -> CpgPassBase
- Inherited from:
- ForkJoinParallelCpgPass
Attributes
- Inherited from:
- NewStyleCpgPassBase
Attributes
- Definition Classes
-
CpgPass -> NewStyleCpgPassBase
- Inherited from:
- CpgPass
Attributes
- Inherited from:
- NewStyleCpgPassBase
Name of the pass. By default it is inferred from the name of the class, override if needed.
Name of the pass. By default it is inferred from the name of the class, override if needed.
Attributes
- Inherited from:
- CpgPassBase
Attributes
- Definition Classes
-
CpgPass -> NewStyleCpgPassBase
- Inherited from:
- CpgPass
Runs the cpg pass, adding changes to the passed builder. Use with caution -- API is unstable. Returns max(nParts, 1), where nParts is either the number of parallel parts, or the number of iterarator elements in case of legacy passes. Includes init() and finish() logic.
Runs the cpg pass, adding changes to the passed builder. Use with caution -- API is unstable. Returns max(nParts, 1), where nParts is either the number of parallel parts, or the number of iterarator elements in case of legacy passes. Includes init() and finish() logic.
Attributes
- Definition Classes
-
NewStyleCpgPassBase -> CpgPassBase
- Inherited from:
- NewStyleCpgPassBase
Wraps runWithBuilder with logging, and swallows raised exceptions. Use with caution -- API is unstable. A return value of -1 indicates failure, otherwise the return value of runWithBuilder is passed through.
Wraps runWithBuilder with logging, and swallows raised exceptions. Use with caution -- API is unstable. A return value of -1 indicates failure, otherwise the return value of runWithBuilder is passed through.
Attributes
- Inherited from:
- CpgPassBase