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.
- Companion
- object
Value members
Concrete methods
Recursively returns all the sub-types of the given type declaration. Does not account for circular hierarchies.
Recursively returns all the sub-types of the given type declaration. Does not account for circular hierarchies.
Inherited methods
Execute the pass and apply result to the underlying graph
Execute the pass and apply result to the underlying graph
- Definition Classes
- CpgPass -> CpgPassBase
- Inherited from
- CpgPass
Execute and create a serialized overlay
Execute and create a serialized overlay
- Value Params
- inverse
invert the diffgraph before serializing
- Inherited from
- CpgPass
Run a CPG pass to create diff graphs, apply diff graphs, create corresponding overlays and add them to the serialized CPG. The name of the overlay is derived from the class name of the pass.
Run a CPG pass to create diff graphs, apply diff graphs, create corresponding overlays and add them to the serialized CPG. The name of the overlay is derived from the class name of the pass.
- Value Params
- inverse
invert the diffgraph before serializing
- prefix
a prefix to add to the output name
- serializedCpg
the destination serialized CPG to add overlays to
- Definition Classes
- CpgPass -> CpgPassBase
- Inherited from
- CpgPass