class DynamicCallLinker 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.
- Alphabetic
- By Inheritance
- DynamicCallLinker
- CpgPass
- ForkJoinParallelCpgPass
- NewStyleCpgPassBase
- CpgPassBase
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new DynamicCallLinker(cpg: Cpg)
Type Members
- type DiffGraphBuilder = overflowdb.BatchedUpdate.DiffGraphBuilder
- Definition Classes
- NewStyleCpgPassBase
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def baseLogger: Logger
- Attributes
- protected
- Definition Classes
- CpgPassBase
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- def createAndApply(): Unit
- Definition Classes
- NewStyleCpgPassBase → CpgPassBase
- def createApplySerializeAndStore(serializedCpg: SerializedCpg, inverse: Boolean, prefix: String): Unit
- Definition Classes
- ForkJoinParallelCpgPass → CpgPassBase
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finish(): Unit
- Definition Classes
- NewStyleCpgPassBase
- def generateOutFileName(prefix: String, outName: String, index: Int): String
- Attributes
- protected
- Definition Classes
- CpgPassBase
- final def generateParts(): Array[_ <: AnyRef]
- Definition Classes
- CpgPass → NewStyleCpgPassBase
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def init(): Unit
- Definition Classes
- NewStyleCpgPassBase
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def name: String
- Definition Classes
- CpgPassBase
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def run(dstGraph: DiffGraphBuilder): Unit
Main method of enhancement - to be implemented by child class
Main method of enhancement - to be implemented by child class
- Definition Classes
- DynamicCallLinker → CpgPass
- final def runOnPart(builder: overflowdb.BatchedUpdate.DiffGraphBuilder, part: AnyRef): Unit
- Definition Classes
- CpgPass → NewStyleCpgPassBase
- def runWithBuilder(externalBuilder: overflowdb.BatchedUpdate.DiffGraphBuilder): Int
- Definition Classes
- NewStyleCpgPassBase → CpgPassBase
- def runWithBuilderLogged(builder: overflowdb.BatchedUpdate.DiffGraphBuilder): Int
- Definition Classes
- CpgPassBase
- def store(overlay: GeneratedMessageV3, name: String, serializedCpg: SerializedCpg): Unit
- Attributes
- protected
- Definition Classes
- CpgPassBase
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- def withStartEndTimesLogged[A](fun: => A): A
- Attributes
- protected
- Definition Classes
- CpgPassBase
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated