DynamicCallLinker

class DynamicCallLinker(cpg: Cpg) extends CpgPass

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
class CpgPass
trait CpgPassBase
class Object
trait Matchable
class Any

Value members

Concrete methods

def allSubclasses(typDeclFullName: String): LinkedHashSet[String]

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.

override
def run(): Iterator[DiffGraph]

Main method of enhancement - to be implemented by child class

Main method of enhancement - to be implemented by child class

Definition Classes
CpgPass

Inherited methods

override
def createAndApply(): Unit

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
def createApplyAndSerialize(inverse: Boolean): Iterator[GeneratedMessageV3]

Execute and create a serialized overlay

Execute and create a serialized overlay

Value Params
inverse

invert the diffgraph before serializing

Inherited from
CpgPass
override
def createApplySerializeAndStore(serializedCpg: SerializedCpg, inverse: Boolean, prefix: String): Unit

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
def name: String

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.

Inherited from
CpgPassBase