def _random_memory_addr_pkt(addr_len=None, size_len=None, size=None): # type: (Optional[int], Optional[int], Optional[int]) -> Packet pkt = UDS() / UDS_RMBA() # type: Packet pkt.memorySizeLen = size_len or random.randint(1, 4) pkt.memoryAddressLen = addr_len or random.randint(1, 4) UDS_RMBARandomEnumerator.set_size(pkt, size or 4) UDS_RMBARandomEnumerator.set_addr( pkt, random.randint( 0, (2 ** (8 * pkt.memoryAddressLen) - 1)) & 0xfffffff0) return pkt
def __pois_to_requests(self, pois): # type: (List[_PointOfInterest]) -> List[Packet] tested_addrs = self._get_memory_addresses_from_results( self.results_with_response) testing_addrs = set() new_requests = list() for addr, upward, mem_size_len, mem_addr_len, mem_size in pois: for i in range(0, mem_size * 50, mem_size): if upward: addr = min(addr + i, 2**(8 * mem_addr_len) - 1) else: addr = max(addr - i, 0) if addr not in tested_addrs and \ (addr, mem_size) not in testing_addrs: pkt = UDS() / UDS_RMBA(memorySizeLen=mem_size_len, memoryAddressLen=mem_addr_len) self.set_size(pkt, mem_size) self.set_addr(pkt, addr) new_requests.append(pkt) testing_addrs.add((addr, mem_size)) return new_requests