Skip to content

Commit

Permalink
introspector: add another target oracle api (#332)
Browse files Browse the repository at this point in the history
Introspector supports an additional API oracle for target querying. It
would be nice to make this available for prompt development.

---------

Signed-off-by: David Korczynski <[email protected]>
  • Loading branch information
DavidKorczynski authored Jun 17, 2024
1 parent 435ad61 commit 7b5e99b
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions data_prep/introspector.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
INTROSPECTOR_CFG = ''
INTROSPECTOR_ORACLE_FAR_REACH = ''
INTROSPECTOR_ORACLE_KEYWORD = ''
INTROSPECTOR_ORACLE_EASY_PARAMS = ''
INTROSPECTOR_FUNCTION_SOURCE = ''
INTROSPECTOR_PROJECT_SOURCE = ''
INTROSPECTOR_XREF = ''
Expand All @@ -56,7 +57,8 @@ def get_oracle_dict() -> Dict[str, Any]:
# Do this in a function to allow for forward-declaration of functions below.
oracle_dict = {
'far-reach-low-coverage': get_unreached_functions,
'low-cov-with-fuzz-keyword': query_introspector_for_keyword_targets
'low-cov-with-fuzz-keyword': query_introspector_for_keyword_targets,
'easy-params-far-reach': query_introspector_for_easy_param_targets,
}
return oracle_dict

Expand All @@ -66,7 +68,8 @@ def set_introspector_endpoints(endpoint):
global INTROSPECTOR_ENDPOINT, INTROSPECTOR_CFG, INTROSPECTOR_FUNC_SIG, \
INTROSPECTOR_FUNCTION_SOURCE, INTROSPECTOR_PROJECT_SOURCE, \
INTROSPECTOR_XREF, INTROSPECTOR_TYPE, INTROSPECTOR_ORACLE_FAR_REACH, \
INTROSPECTOR_ORACLE_KEYWORD, INTROSPECTOR_ADDR_TYPE
INTROSPECTOR_ORACLE_KEYWORD, INTROSPECTOR_ADDR_TYPE, \
INTROSPECTOR_ORACLE_EASY_PARAMS

INTROSPECTOR_ENDPOINT = endpoint
logging.info('Fuzz Introspector endpoint set to %s', INTROSPECTOR_ENDPOINT)
Expand All @@ -76,6 +79,8 @@ def set_introspector_endpoints(endpoint):
f'{INTROSPECTOR_ENDPOINT}/far-reach-but-low-coverage')
INTROSPECTOR_ORACLE_KEYWORD = (
f'{INTROSPECTOR_ENDPOINT}/far-reach-low-cov-fuzz-keyword')
INTROSPECTOR_ORACLE_EASY_PARAMS = (
f'{INTROSPECTOR_ENDPOINT}/easy-params-far-reach')
INTROSPECTOR_FUNCTION_SOURCE = f'{INTROSPECTOR_ENDPOINT}/function-source-code'
INTROSPECTOR_PROJECT_SOURCE = f'{INTROSPECTOR_ENDPOINT}/project-source-code'
INTROSPECTOR_XREF = f'{INTROSPECTOR_ENDPOINT}/all-cross-references'
Expand Down Expand Up @@ -167,6 +172,12 @@ def query_introspector_for_keyword_targets(project: str) -> list[dict]:
return query_introspector_oracle(project, INTROSPECTOR_ORACLE_KEYWORD)


def query_introspector_for_easy_param_targets(project: str) -> list[dict]:
"""Queries Fuzz Introspector for targets that have fuzzer-friendly params,
such as data buffers."""
return query_introspector_oracle(project, INTROSPECTOR_ORACLE_EASY_PARAMS)


def query_introspector_for_targets(project, target_oracle) -> list[Dict]:
"""Queries introspector for target functions."""
query_func = get_oracle_dict().get(target_oracle, None)
Expand Down

0 comments on commit 7b5e99b

Please sign in to comment.