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'))
Esempio n. 3
0
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
Esempio n. 4
0
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