Beispiel #1
0
 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
Beispiel #2
0
    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