A computer-based method of generating a function call graph for a codebase, the method comprising: identifying, with a processor, functions in the codebase using a function signature; performing the following steps for all functions in the codebase: representing a particular identified function as a first node in the function call graph; for the particular function, identifying call-to functions, call-from functions, inheritance parents, and inheritance children, and a base class associated with the particular function based on the function signature of that particular function; adding first child nodes to the first node based on the identified call-to and call-from functions; for an interface call to a base class method in the particular function, adding second child nodes to the first node based on implementations of an override of the base class method; for each child node of the first node, generating a binary file filter for the parent-child relationship, the binary file filter being based on binary files that include the particular function and a function represented by a child node, the binary file filter being a Bloom filter configured to indicate binary files that include the particular function and the function represented by the child node as files that pass the Bloom filter; building the function call graph with each graph node being associated with a Bloom filter; and searching the function call graph to find a possible function call path from a starting node to an ending node in the graph, wherein, beginning at the starting node, for each of its child nodes: if the binary files do not pass the Bloom filter for the child node, the child node is discarded as not being part of a possible function call path, and if the binary files pass the Bloom filter for the child node, the child node is added to a trace of possible call paths. identifying, with a processor, functions in the codebase using a function signature; performing the following steps for all functions in the codebase: representing a particular identified function as a first node in the function call graph; for the particular function, identifying call-to functions, call-from functions, inheritance parents, and inheritance children, and a base class associated with the particular function based on the function signature of that particular function; adding first child nodes to the first node based on the identified call-to and call-from functions; for an interface call to a base class method in the particular function, adding second child nodes to the first node based on implementations of an override of the base class method; representing a particular identified function as a first node in the function call graph; for the particular function, identifying call-to functions, call-from functions, inheritance parents, and inheritance children, and a base class associated with the particular function based on the function signature of that particular function; adding first child nodes to the first node based on the identified call-to and call-from functions; for an interface call to a base class method in the particular function, adding second child nodes to the first node based on implementations of an override of the base class method; for each child node of the first node, generating a binary file filter for the parent-child relationship, the binary file filter being based on binary files that include the particular function and a function represented by a child node, the binary file filter being a Bloom filter configured to indicate binary files that include the particular function and the function represented by the child node as files that pass the Bloom filter; building the function call graph with each graph node being associated with a Bloom filter; and searching the function call graph to find a possible function call path from a starting node to an ending node in the graph, wherein, beginning at the starting node, for each of its child nodes: if the binary files do not pass the Bloom filter for the child node, the child node is discarded as not being part of a possible function call path, and if the binary files pass the Bloom filter for the child node, the child node is added to a trace of possible call paths. if the binary files do not pass the Bloom filter for the child node, the child node is discarded as not being part of a possible function call path, and if the binary files pass the Bloom filter for the child node, the child node is added to a trace of possible call paths.