Source code for rpcclient.symbols_jar

from rpcclient.exceptions import SymbolAbsentError


[docs] class SymbolsJar(dict):
[docs] @staticmethod def create(client): """ Factory method for creating symbols jars :param client: client :rtype: SymbolsJar """ jar = SymbolsJar() jar.__dict__['_client'] = client return jar
[docs] def get_lazy(self, name): client = self.__dict__['_client'] s = client.dlsym(client._dlsym_global_handle, name) if 0 == s: raise SymbolAbsentError(f'no such loaded symbol: {name}') self[name] = client.symbol(s) return self[name]
def __getitem__(self, item): if item not in self: symbol = self.get_lazy(item) if symbol: return symbol return dict.__getitem__(self, item) def __getattr__(self, name): if name not in self: client = self.__dict__['_client'] s = client.dlsym(client._dlsym_global_handle, name) if 0 == s: raise SymbolAbsentError(f'no such loaded symbol: {name}') self[name] = client.symbol(s) return self[name] return self.get(name) def __setattr__(self, key, value): return self.__setitem__(key, value) def __delattr__(self, item): return self.__delitem__(item) def __sub__(self, other): retval = SymbolsJar.create(self.__dict__['_client']) for k1, v1 in self.items(): if k1 not in other: retval[k1] = v1 return retval def __add__(self, other): retval = SymbolsJar.create(self.__dict__['_client']) for k, v in other.items(): retval[k] = v for k, v in self.items(): retval[k] = v return retval