Packages

class DynamicCallLinker extends SimpleCpgPass

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.

Linear Supertypes
SimpleCpgPass, ForkJoinParallelCpgPass[AnyRef], NewStyleCpgPassBase[AnyRef], CpgPassBase, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. DynamicCallLinker
  2. SimpleCpgPass
  3. ForkJoinParallelCpgPass
  4. NewStyleCpgPassBase
  5. CpgPassBase
  6. AnyRef
  7. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new DynamicCallLinker(cpg: Cpg)

Type Members

  1. type DiffGraphBuilder = overflowdb.BatchedUpdate.DiffGraphBuilder
    Definition Classes
    NewStyleCpgPassBase

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def allSubclasses(typDeclFullName: String): LinkedHashSet[String]

    Recursively returns all the sub-types of the given type declaration.

    Recursively returns all the sub-types of the given type declaration. Does not account for circular hierarchies.

  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. def baseLogger: Logger
    Attributes
    protected
    Definition Classes
    CpgPassBase
  7. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
  8. def createAndApply(): Unit
    Definition Classes
    NewStyleCpgPassBase → CpgPassBase
  9. def createApplySerializeAndStore(serializedCpg: SerializedCpg, inverse: Boolean, prefix: String): Unit
    Definition Classes
    ForkJoinParallelCpgPass → CpgPassBase
  10. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  11. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  12. def finish(): Unit
    Definition Classes
    NewStyleCpgPassBase
  13. def generateOutFileName(prefix: String, outName: String, index: Int): String
    Attributes
    protected
    Definition Classes
    CpgPassBase
  14. final def generateParts(): Array[_ <: AnyRef]
    Definition Classes
    SimpleCpgPass → NewStyleCpgPassBase
  15. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  16. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  17. def init(): Unit
    Definition Classes
    NewStyleCpgPassBase
  18. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  19. def name: String
    Definition Classes
    CpgPassBase
  20. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  21. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  22. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  23. 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 → SimpleCpgPass
  24. final def runOnPart(builder: overflowdb.BatchedUpdate.DiffGraphBuilder, part: AnyRef): Unit
    Definition Classes
    SimpleCpgPass → NewStyleCpgPassBase
  25. def runWithBuilder(externalBuilder: overflowdb.BatchedUpdate.DiffGraphBuilder): Int
    Definition Classes
    NewStyleCpgPassBase → CpgPassBase
  26. def runWithBuilderLogged(builder: overflowdb.BatchedUpdate.DiffGraphBuilder): Int
    Definition Classes
    CpgPassBase
  27. def store(overlay: GeneratedMessageV3, name: String, serializedCpg: SerializedCpg): Unit
    Attributes
    protected
    Definition Classes
    CpgPassBase
  28. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  29. def toString(): String
    Definition Classes
    AnyRef → Any
  30. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  31. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  32. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  33. def withStartEndTimesLogged[A](fun: => A): A
    Attributes
    protected
    Definition Classes
    CpgPassBase

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable]) @Deprecated
    Deprecated

Inherited from SimpleCpgPass

Inherited from ForkJoinParallelCpgPass[AnyRef]

Inherited from NewStyleCpgPassBase[AnyRef]

Inherited from CpgPassBase

Inherited from AnyRef

Inherited from Any

Ungrouped