Пример #1
0
def odump(data):
    def print_format(offset, bytes, dump):
        print("%4x:" % offset, end="") # オフセット
        xs = [] # 16進数で出力
        for i in range(0, len(bytes), 2):
            x = (bytes[i+1] << 8) | bytes[i]
            xs.append(" %04x" % x)
        print("".join(xs).ljust(16), end="")

        d = list(map(str, dump))
        if len(d) == 1:
            s = d[0]
        else:
            s = d[0] + " " + ", ".join(d[1:])
        s = s.ljust(20)
        print(s, end="")

        ys = [] # 8進数で出力
        for i in range(0, len(bytes), 2):
            x = (bytes[i+1] << 8) | bytes[i]
            ys.append(" %06o" % x)
        print("".join(ys))
        pass
    
    offset = 0
    while data.has_more_elements():
        if offset >= _text_size: break
        data.marked()
        op = util.read2(data)

        d = opcode.dispatch(op, data, run.MODE_DUMP, None)
        eatbytes = data.get_readbytes_from_mark() # 読み込んだバイト配列

        # ダンプ
        print_format(offset, eatbytes, d)

        # 読み込んだバイト分、オフセットを進める
        offset += len(data.get_readbytes_from_mark())