def RealRepoint(rom: _io.BufferedReader, offsetTuples: [(int, int, str)]): pointerList = [] pointerDict = {} for tup in offsetTuples: # Format is (Double Pointer, New Pointer, Symbol) offset = tup[0] rom.seek(offset) pointer = ExtractPointer(rom.read(4)) pointerList.append(pointer) pointerDict[pointer] = (tup[1] + 0x08000000, tup[2]) offset = 0 offsetList = [] while offset < 0xFFFFFD: if offset in IGNORED_OFFSETS: offset += 4 continue rom.seek(offset) word = ExtractPointer(rom.read(4)) rom.seek(offset) for pointer in pointerList: if word == pointer: offsetList.append((offset, pointerDict[pointer][1])) rom.write(bytes(pointerDict[pointer][0].to_bytes(4, 'little'))) break offset += 4 return offsetList
def extract_file_bitstream(self, file_object: _io.BufferedReader) -> str: """ Converts a file object into a string of 0's and 1's for easy processing down the road :param file_object: :return bitstream: """ bitstream = "" while (byte := file_object.read(1)): bitstream += "{0:08b}".format(int.from_bytes(byte, byteorder='big'))
def _load_header_rest( stream: _io.BufferedReader) -> typing.Tuple[typing.List[str], int]: header_parts: typing.List[str] = [] offset: int = 0 while True: block: bytes = stream.read(BLOCK_SIZE) if not block: break header_parts.append(block) if END_CARD in block: break offset = offset + BLOCK_SIZE if not END_CARD in header_parts[-1]: raise NotImplementedError(f'Invalid FITS file') return header_parts, offset
def RamRepoint(rom: _io.BufferedReader, offsetTuples: [(int, int)]): pointerList = [] pointerDict = {} for tup in offsetTuples: # Format is (Old Pointer, New Pointer) pointer = tup[0] pointerList.append(pointer) pointerDict[pointer] = tup[1] offset = 0 while offset < 0xFFFFFD: rom.seek(offset) word = ExtractRamPointer(rom.read(4)) rom.seek(offset) for pointer in pointerList: if word == pointer: rom.write(bytes(pointerDict[pointer].to_bytes(4, 'little'))) break offset += 4