def _copyFromData()

in commands/FBCopyCommands.py [0:0]


def _copyFromData(data, defaultFilename, preferredFilename, noOpen):
    directory = "/tmp/chisel_copy/"

    path = directory + (preferredFilename or defaultFilename)

    try:
        os.makedirs(directory)
    except OSError as e:
        if e.errno == errno.EEXIST and os.path.isdir(directory):
            pass
        else:
            raise

    startAddress = fb.evaluateExpression("(void *)[(id)" + data + " bytes]")
    length = fb.evaluateExpression("(NSUInteger)[(id)" + data + " length]")

    address = int(startAddress, 16)
    length = int(length)

    if not (address or length):
        print("Could not get data.")
        return

    process = lldb.debugger.GetSelectedTarget().GetProcess()
    error = lldb.SBError()
    mem = process.ReadMemory(address, length, error)

    if error is not None and str(error) != "success":
        print(error)
    else:
        with open(path, "wb") as file:
            file.write(mem)
            file.close()
        print(path)
        if not noOpen:
            os.system("open " + path)