io.joern.x2cpg.passes.callgraph

Type members

Classlikes

class DynamicCallLinker(cpg: Cpg) 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.

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
Companion:
class
class MethodRefLinker(cpg: Cpg) extends SimpleCpgPass

This pass has MethodStubCreator and TypeDeclStubCreator as prerequisite for language frontends which do not provide method stubs and type decl stubs.

This pass has MethodStubCreator and TypeDeclStubCreator as prerequisite for language frontends which do not provide method stubs and type decl stubs.

Companion:
object
Companion:
class
class StaticCallLinker(cpg: Cpg) extends SimpleCpgPass
Companion:
object
Companion:
class