Brainfuck反汇编-高级版(Python)
- 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)的更多相关文章
- 自定义高级版python线程池
基于简单版创建类对象过多,现自定义高级版python线程池,代码如下 #高级线程池 import queue import threading import time StopEvent = obje ...
- PluginOK中间件高级版-支持在Chrome、Edge、Firefox等浏览器网页中真正内嵌ActiveX等控件运行的版本已获多家上市公司采购
PluginOK(牛插)中间件(原名:本网通WebRunLocal)是一个实现WEB浏览器(Web Browser)与本地程序(Local Application)之间进行双向调用的低成本.强兼容.安 ...
- yii2高级版账号密码问题
yii2高级版默认后台没有密码,生成账号密码步骤: 1. CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` ...
- PHP框架Yii2.0安装(基础版、高级版)
最近农成也是切入了yiiframework 2.0,就是安装yii2.0就花费了不少的时间,为此做了很多的弯路,特此写一篇博文来给后面学习的同学少走一点的弯路.写的不好的地方欢迎各位学习的同学们能够指 ...
- Win7家庭普通版、家庭高级版、专业版、旗舰版版本差别
刚才我们发了一个大图片:<Windows7.Vista.XP 三大系统功能差异比较一览图>,现在,再发一张对比图片,简要的看看Windows7家庭普通版.家庭高级版.专业版.旗舰版这四个版 ...
- 【Win7激活工具2013版下载】适用于旗舰版、家庭高级版等所有版本32/64位 OEM激活
虽然现在Win8已经发布了,但是身边总是还有一些朋友在用着Win7系统,而近期微软频繁的推送补丁包,导致之前的那些激活都失效了.找了网络上很多工具,之前的那些有的已经不能用了,激活不了,今天就推荐一些 ...
- 宣布正式发布 Biz Talk Services、Azure Active Directory 和 Traffic Manager, 同时发布 Azure Active Directory 高级版预览
除经济优势之外,云计算还在可转化为竞争优势的应用程序开发方面提供了更大的灵活性.我们很高兴看到每天创建的新 Windows Azure 订阅超过 1000 个,更令人兴奋的是,有一半客户使用价值更高的 ...
- 希尔排序之C++实现(高级版)
希尔排序之C++实现(高级版) 一.源代码:ShellSortHigh.cpp /*希尔排序基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组. 所有距离为d1的倍数的记录放在同 ...
- 直接插入排序(高级版)之C++实现
直接插入排序(高级版)之C++实现 一.源代码:InsertSortHigh.cpp /*直接插入排序思想: 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成1个有序区,无序区为R[2 ...
随机推荐
- C# 重启程序本身
private static void Restart() { Thread thtmp = new Thread(new ParameterizedThreadStart(run)); object ...
- 关于文档模式、DCOTYPE声明及严格模式
1.文档模式 文档模式的概念是由IE5.5引入,通过使用文档类型(DOCTYPE)切换实现的.不同的文档模式主要影响CSS内容的呈现,尤其是浏览器对盒模型的解析,但在某些情况下也会影响到JavaScr ...
- grpc ssl使用
相关链接 http://www.jianshu.com/p/2873a8349ca0
- ModelForm的使用
from django.forms import Form,ModelForm,fields,widgets as wd class QueModelForm(ModelForm): class Me ...
- 在web.xml中设置全局编码
在web.xml中配置 <filter> <filter-name>characterFilter</filter-name> <filter-class&g ...
- c/c++中int main(int argc,char *argv[])的具体含义
int main(int argc,char * argv[ ]) argv为指针的指针 argc为整数 char **argv or: char *argv[ ] or: char argv[ ][ ...
- Redis集群官方推荐方案 Redis-Cluster
Redis-Cluster redis使用中遇到的瓶颈 我们日常在对于redis的使用中,经常会遇到一些问题 1.高可用问题,如何保证redis的持续高可用性. 2.容量问题,单实例redis内存无法 ...
- jsp get参数乱码问题
摘自:username2.iteye.com/blog/1597917个人理解中文传送的时后需要转码: js代码: 要进行两次转码才不会出现乱码(默认为UTF-) encodeURI(encodeUR ...
- AngularJS中处理多个promise
在使用AngularJS中处理promise的时候,有时会碰到需要处理多个promise的情况. 最简单的处理就是每个promise都then.如下: var app = angular.module ...
- What is a UINavigationTransitionView
**AFAIK UINavigationTransitionView is a class used to animate UINavigationController child views aro ...