import re

def sym2cal(s):
if '>' in s:
return len(s)
else:
return -len(s) def cal(s):
if '+' in s:
return '+= %d'%len(s)
else:
return '-= %d'%len(s) def bf2asm(s,ptr,tab):
p =
l = len(s)
while(p<l):
pattern = re.compile(r'([><]*)\[-([><]*)\[-\]([><]+)\[-\]([><]+)\[-([><]+)\+([><]+)\+([><]+)\]([><]+)\[-([><]+)\+([><]+)\]([><]*)\[-([><]+)\+([><]+)\]([><]*)\]')
match = pattern.match(s[p:])
if match:
p += len(match.group()) groups = match.groups()
ptr1 = ptr + sym2cal(groups[])
ptr2 = ptr1
for i in xrange(,):
ptr2 += sym2cal(groups[i])
ptr3 = ptr2
for i in xrange(,):
ptr3 += sym2cal(groups[i])
print tab+'mem[%d] += mem[%d]*mem[%d]'%(ptr3,ptr2,ptr1) for v in groups:
ptr += sym2cal(v)
continue pattern = re.compile(r'([><]*)\[-\]([><]+)\[-\]([><]+)\[-([><]+)\+([><]+)\+([><]+)\]([><]+)\[-([><]+)\+([><]+)\]([><]*)\[-([><]+)\+([><]+)\]')
match = pattern.match(s[p:])
if match:
p += len(match.group()) groups = match.groups()
ptr1 = ptr
for i in xrange():
ptr1 += sym2cal(groups[i])
ptr2 = ptr1
for i in xrange(,):
ptr2 += sym2cal(groups[i])
print tab+'mem[%d] += mem[%d]'%(ptr2,ptr1) for v in groups:
ptr += sym2cal(v)
continue pattern = re.compile(r'([><]*)\[-\]([><]+)\[-\]([><]+)\[-([><]+)\+([><]+)\+([><]+)\]([><]+)\[-([><]+)\+([><]+)\]([><]+)')
match = pattern.match(s[p:])
if match:
p += len(match.group()) groups = match.groups()
ptr1 = ptr + sym2cal(groups[])
ptr2 = ptr1 + sym2cal(groups[])
ptr3 = ptr2 + sym2cal(groups[])
print tab+'mem[%d] = mem[%d]'%(ptr1,ptr3) for v in groups:
ptr += sym2cal(v)
continue pattern = re.compile(r'\[-\]')
match = pattern.match(s[p:])
if match:
p += len(match.group())
print tab+'mem[%d] = 0'%(ptr)
continue pattern = re.compile(r'>+')
match = pattern.match(s[p:])
if match:
p += len(match.group())
ptr += len(match.group())
continue pattern = re.compile(r'<+')
match = pattern.match(s[p:])
if match:
p += len(match.group())
ptr -= len(match.group())
continue pattern = re.compile(r'\++')
match = pattern.match(s[p:])
if match:
p += len(match.group())
print tab+'mem[%d] %s'%(ptr,cal(match.group()))
continue pattern = re.compile(r'-+')
match = pattern.match(s[p:])
if match:
p += len(match.group())
print tab+'mem[%d] %s'%(ptr,cal(match.group()))
continue c = s[p]
if c == '[':
stk =
for i,v in enumerate(s[p+:]):
if v == '[':
stk +=
elif v == ']':
stk -=
else:
continue
if stk == :
print tab+'while mem[%d]:'%ptr
ptr = bf2asm(s[p+:p++i],ptr,tab+'\t')
p += i+
break
continue elif c == ',':
if input_ptr < :
print tab+'mov mem[%d] input[input_ptr]'%ptr
else:
if bit_add >= :
print tab+'mov mem[%d] 0x30'%ptr
else:
print tab+'mov mem[%d] 1'%ptr
elif c == '.':
print tab+'cmp mem[%d] data[data_ptr]'%ptr
p +=
return ptr s = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>[->+<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>,>>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>]"
input_ptr =
bit_add =
bf2asm(s,,'')

会简化一些代码流程,比如

while mem[]:
mem[] -=
while mem[]:
mem[] -=
while mem[]:
mem[] -=
mem[] +=
mem[] +=
while mem[]:
mem[] -=
mem[] +=

上面这段代码,分析后其实就是

mem[] = mem[]

Brainfuck反汇编-高级版(Python)的更多相关文章

  1. 自定义高级版python线程池

    基于简单版创建类对象过多,现自定义高级版python线程池,代码如下 #高级线程池 import queue import threading import time StopEvent = obje ...

  2. PluginOK中间件高级版-支持在Chrome、Edge、Firefox等浏览器网页中真正内嵌ActiveX等控件运行的版本已获多家上市公司采购

    PluginOK(牛插)中间件(原名:本网通WebRunLocal)是一个实现WEB浏览器(Web Browser)与本地程序(Local Application)之间进行双向调用的低成本.强兼容.安 ...

  3. yii2高级版账号密码问题

    yii2高级版默认后台没有密码,生成账号密码步骤: 1. CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` ...

  4. PHP框架Yii2.0安装(基础版、高级版)

    最近农成也是切入了yiiframework 2.0,就是安装yii2.0就花费了不少的时间,为此做了很多的弯路,特此写一篇博文来给后面学习的同学少走一点的弯路.写的不好的地方欢迎各位学习的同学们能够指 ...

  5. Win7家庭普通版、家庭高级版、专业版、旗舰版版本差别

    刚才我们发了一个大图片:<Windows7.Vista.XP 三大系统功能差异比较一览图>,现在,再发一张对比图片,简要的看看Windows7家庭普通版.家庭高级版.专业版.旗舰版这四个版 ...

  6. 【Win7激活工具2013版下载】适用于旗舰版、家庭高级版等所有版本32/64位 OEM激活

    虽然现在Win8已经发布了,但是身边总是还有一些朋友在用着Win7系统,而近期微软频繁的推送补丁包,导致之前的那些激活都失效了.找了网络上很多工具,之前的那些有的已经不能用了,激活不了,今天就推荐一些 ...

  7. 宣布正式发布 Biz Talk Services、Azure Active Directory 和 Traffic Manager, 同时发布 Azure Active Directory 高级版预览

    除经济优势之外,云计算还在可转化为竞争优势的应用程序开发方面提供了更大的灵活性.我们很高兴看到每天创建的新 Windows Azure 订阅超过 1000 个,更令人兴奋的是,有一半客户使用价值更高的 ...

  8. 希尔排序之C++实现(高级版)

    希尔排序之C++实现(高级版) 一.源代码:ShellSortHigh.cpp /*希尔排序基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组. 所有距离为d1的倍数的记录放在同 ...

  9. 直接插入排序(高级版)之C++实现

    直接插入排序(高级版)之C++实现 一.源代码:InsertSortHigh.cpp /*直接插入排序思想: 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成1个有序区,无序区为R[2 ...

随机推荐

  1. Java设计模式从精通到入门三 策略模式

    介绍 我尽量用最少的语言解释总结: Java23种设计模式之一,属于行为型模式.一个类的行为或者算法可以在运行时更改,策略对象改变context对象执行算法. 应用实例: ​ 以周瑜赔了夫人又折兵的例 ...

  2. java显示树结构

    /** * 显示多颗树的所有节点的信息 * * @param departmentList */ private void showTreeList(Collection<Department& ...

  3. jsp导出简单的excel

    在jsp中加入以下代码即可 <% String fileName = "导出excel.xls"; fileName = new String(fileName.getByt ...

  4. MyEclipse启动时 弹出提醒框

    1. MyEclipse has detected that less than 5% of the 31MB of PS Survivor Space (Heap memory) space rem ...

  5. js selection对象使用方法

    IE:document.selection FireFox:window.getSelection() document.selection只有IE支持,window.getSelection()也只 ...

  6. 让你提升命令行效率的 Bash 快捷键 [完整版]

    转自:http://linuxtoy.org/archives/bash-shortcuts.html 生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 大部分对其他 ...

  7. 通过ZwQuerySystemInformation获取EPROCESS

    google一下,发现很多都是直接通过ZwQuerySystemInformation通过11号获取进程结构SYSTEM_PROCESS_INFORMATION,对于详细的进程信息表达不够.所以想要通 ...

  8. iOS开发-UIView扩展CGRect

    关于UIView的位置都会遇到,一般需要改变UIView的位置,需要先获取原有的frame位置,然后在frame上面修改,有的时候如果只是改变了一下垂直方向的位置,宽度和高度的一种,这种写法很麻烦.下 ...

  9. angular default project (angular.json的解读)

    Change the default Angular project Understanding it's purpose and limits Klaus KazlauskasFollow Nov ...

  10. task_payment_byonlinedown

    CREATE DEFINER=`root`@`%` PROCEDURE `vir`.`task_payment_byonlinedown`()begin declare _mobile varchar ...