zoukankan      html  css  js  c++  java
  • Brainfuck反汇编(Python)

    global cs
    global ip
    
    global ss
    #global sp
    
    global ds
    global bp
    
    global tab
    global out
    #cs='++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
    ip = 0
    
    ss = []
    #sp = 0
    
    ds = []
    bp = 0
    
    tab = 0
    out = []
    
    def tab_():
        i = tab
        stab = ''
        while i > 0:
            stab += '	'
            i -= 1
        return stab
    
    def push(var):
        global ss
        ss.append(var)
    
    def pop():
        global ss
        return ss.pop()
    
    def op_inc_val():
        global ip
        count = 0
        while True:
            op = cs[ip]            
            ip = ip + 1
            if op == '+':
                count = count + 1
            else:
                break
        print tab_()+'ds[%d] += %d'%(bp, count)
    
    def op_dec_val():
        global ip    
        count = 0
        while True:
            op = cs[ip]            
            ip = ip + 1
            if op == '-':
                count = count + 1
            else:
                break
        print tab_()+'ds[%d] -= %d'%(bp, count)
    
    def op_inc_dp():
        global bp
        bp = bp + 1
    
    def op_dec_dp():
        global bp
        bp = bp - 1
    
    def op_jmp_fwd():
        global tab
        print tab_()+'while ds[%d]:'%(bp)
        tab = tab + 1
    
    def op_jmp_bck():
        global tab
        tab = tab - 1
    
    def op_out():
        print tab_()+'putchar(ds[%d])'%(bp)
    
    def op_in():
        print tab_()+'getchar'
    
    end = len(cs)
    while ip < end:
        op = cs[ip]
        ip = ip + 1
        if op == '+':
            ip = ip - 1
            op_inc_val()
            ip = ip - 1
        elif op == '-':
            ip = ip - 1
            op_dec_val()
            ip = ip - 1
        elif op == '>':
            op_inc_dp()
        elif op == '<':
            op_dec_dp()
        elif op == '[':
            op_jmp_fwd()
        elif op == ']':
            op_jmp_bck()
        elif op == '.':
            op_out()
        elif op == ',':
            op_in()
        else:
            print 'invalid opcode'
            break
  • 相关阅读:
    查看硬件的一些命令
    InfluxDB部署和使用
    利用mysql时间函数监控表中有没有当天数据
    js基础_for循环(学习笔记)
    JS基础_运算符的优先级
    JS基础_相等运算符
    Apache安装与卸载(win10系统测试)
    MySQL --添加环境变量教程
    MySQL安装教程及遇到的错误提示
    如何完全卸载MySQL
  • 原文地址:https://www.cnblogs.com/qintangtao/p/7100237.html
Copyright © 2011-2022 走看看