diff --git a/librarytrader/library.py b/librarytrader/library.py index ff66a2ac0ac4b4acdae6e5332a0d86b3afbab763..065e287adb087c1809db57e74e03b60f0b9ad6cb 100644 --- a/librarytrader/library.py +++ b/librarytrader/library.py @@ -1198,8 +1198,11 @@ class Library: def find_exports_by_pattern(self, requested_pattern): retval = set() + escaped_pattern = re.escape(requested_pattern) for name, addr in self.exported_names.items(): - if re.fullmatch(re.escape(requested_pattern), name): + if re.fullmatch(escaped_pattern, name): + retval.add(addr) + elif re.fullmatch(escaped_pattern, name.split('@@')[0]): retval.add(addr) return retval diff --git a/scripts/parse_collected_uprobes.py b/scripts/parse_collected_uprobes.py index d7d5c64080c42e474bbb3b5c3c8e46bf3a315823..12112ccb58b1559238231c1d4eacbeeca12d7a95 100755 --- a/scripts/parse_collected_uprobes.py +++ b/scripts/parse_collected_uprobes.py @@ -82,8 +82,7 @@ with open(collectpath, 'r') as collectfd: else: traced_only_binaries += 1 # parsed_mapping[lib.fullname].add('LOCAL_{}'.format(offset)) - for name in lib.local_functions[offset]: - parsed_mapping[lib.fullname].add('LOCAL_{}'.format(name)) + parsed_mapping[lib.fullname].add('LOCAL_{}'.format(hex(offset))) print('LOCAL_{}'.format(offset), 'name set: {}'.format(lib.local_functions[offset])) else: print('no functions for {}:{}'.format(lib.fullname, hex(offset))) @@ -100,7 +99,7 @@ with open(collectpath, 'r') as collectfd: traced_only_libraries += 1 else: traced_only_binaries += 1 - parsed_mapping[lib.fullname].add(fnames[0]) + parsed_mapping[lib.fullname].add('GLOBAL_{}'.format(hex(offset))) n_export = 0 n_local = 0 diff --git a/scripts/running_analysis.py b/scripts/running_analysis.py index b45e10013c4abeef21cd1f2ca7ebc1ca516f29a7..19203b3a41d02d47f5acbad8738e12b106e0be2f 100755 --- a/scripts/running_analysis.py +++ b/scripts/running_analysis.py @@ -210,8 +210,18 @@ class Runner(): logging.debug('_mark_extra_functions: found match for '\ 'local function pattern \'%s\' at %s', function[6:], addrs) + elif function.startswith('GLOBAL_'): + if function[7:].isdigit(): + addrs.add(int(function[7:])) + elif function[7:].startswith('0x'): + addrs.add(int(function[9:], base=16)) else: - addrs.update(library.find_exports_by_pattern(function)) + export = library.find_exports_by_pattern(function) + if export: + logging.debug('_mark_extra_functions: found global '\ + 'addrs %s for %s', export, function) + addrs.update(export) + addrs.update(library.find_local_functions(function)) if not addrs: logging.warning('mark_extra: %s not found in %s', function, library.fullname)