Closed github-learning-lab[bot] closed 2 years ago
memcpy
6_memcpy_calls.ql
memcpy
.Tip: You can have a look at the following C++ example. Note that your query will be simpler as you won't need to consider the declaringType
.
Finds calls to
std::map<...>::find()
import cpp from FunctionCall call, Function fcn where call.getTarget() = fcn and fcn.getDeclaringType().getSimpleName() = "map" and fcn.getDeclaringType().getNamespace().getName() = "std" and fcn.hasName("find") select call
Note: Once you have good results, you can try to make your query more compact by omitting the intermediate Function
variable. The 2 queries below are equivalent:
from Class1 c1, Class2 c2
where
c1.getClass2() = c2 and
c2.getProp() = "something"
select c1
from Class1 c1
where c1.getClass2().getProp() = "something"
select c1
Congratulations, looks like the query you introduced in e162f57ecde0a4c3697bc0d042486d659602447b finds the correct results!
If you created a pull request, merge it.
Let's continue to the next step.
Step 6: Relating two variables
In step 4, you wrote a query that finds the definitions of functions named
memcpy
in the codebase. Now, we want to find all the calls tomemcpy
in the codebase.One way to do this is to declare two variables: one to represent functions, and one to represent function calls. Then you will have to create a relationship between these variables in the
where
section, so that they are restricted to only functions that are namedmemcpy
, and calls to exactly those functions.