1. import re
  2.  
  3. def sym2cal(s):
  4. if '>' in s:
  5. return len(s)
  6. else:
  7. return -len(s)
  8.  
  9. def cal(s):
  10. if '+' in s:
  11. return '+= %d'%len(s)
  12. else:
  13. return '-= %d'%len(s)
  14.  
  15. def bf2asm(s,ptr,tab):
  16. p =
  17. l = len(s)
  18. while(p<l):
  19. pattern = re.compile(r'([><]*)\[-([><]*)\[-\]([><]+)\[-\]([><]+)\[-([><]+)\+([><]+)\+([><]+)\]([><]+)\[-([><]+)\+([><]+)\]([><]*)\[-([><]+)\+([><]+)\]([><]*)\]')
  20. match = pattern.match(s[p:])
  21. if match:
  22. p += len(match.group())
  23.  
  24. groups = match.groups()
  25. ptr1 = ptr + sym2cal(groups[])
  26. ptr2 = ptr1
  27. for i in xrange(,):
  28. ptr2 += sym2cal(groups[i])
  29. ptr3 = ptr2
  30. for i in xrange(,):
  31. ptr3 += sym2cal(groups[i])
  32. print tab+'mem[%d] += mem[%d]*mem[%d]'%(ptr3,ptr2,ptr1)
  33.  
  34. for v in groups:
  35. ptr += sym2cal(v)
  36. continue
  37.  
  38. pattern = re.compile(r'([><]*)\[-\]([><]+)\[-\]([><]+)\[-([><]+)\+([><]+)\+([><]+)\]([><]+)\[-([><]+)\+([><]+)\]([><]*)\[-([><]+)\+([><]+)\]')
  39. match = pattern.match(s[p:])
  40. if match:
  41. p += len(match.group())
  42.  
  43. groups = match.groups()
  44. ptr1 = ptr
  45. for i in xrange():
  46. ptr1 += sym2cal(groups[i])
  47. ptr2 = ptr1
  48. for i in xrange(,):
  49. ptr2 += sym2cal(groups[i])
  50. print tab+'mem[%d] += mem[%d]'%(ptr2,ptr1)
  51.  
  52. for v in groups:
  53. ptr += sym2cal(v)
  54. continue
  55.  
  56. pattern = re.compile(r'([><]*)\[-\]([><]+)\[-\]([><]+)\[-([><]+)\+([><]+)\+([><]+)\]([><]+)\[-([><]+)\+([><]+)\]([><]+)')
  57. match = pattern.match(s[p:])
  58. if match:
  59. p += len(match.group())
  60.  
  61. groups = match.groups()
  62. ptr1 = ptr + sym2cal(groups[])
  63. ptr2 = ptr1 + sym2cal(groups[])
  64. ptr3 = ptr2 + sym2cal(groups[])
  65. print tab+'mem[%d] = mem[%d]'%(ptr1,ptr3)
  66.  
  67. for v in groups:
  68. ptr += sym2cal(v)
  69. continue
  70.  
  71. pattern = re.compile(r'\[-\]')
  72. match = pattern.match(s[p:])
  73. if match:
  74. p += len(match.group())
  75. print tab+'mem[%d] = 0'%(ptr)
  76. continue
  77.  
  78. pattern = re.compile(r'>+')
  79. match = pattern.match(s[p:])
  80. if match:
  81. p += len(match.group())
  82. ptr += len(match.group())
  83. continue
  84.  
  85. pattern = re.compile(r'<+')
  86. match = pattern.match(s[p:])
  87. if match:
  88. p += len(match.group())
  89. ptr -= len(match.group())
  90. continue
  91.  
  92. pattern = re.compile(r'\++')
  93. match = pattern.match(s[p:])
  94. if match:
  95. p += len(match.group())
  96. print tab+'mem[%d] %s'%(ptr,cal(match.group()))
  97. continue
  98.  
  99. pattern = re.compile(r'-+')
  100. match = pattern.match(s[p:])
  101. if match:
  102. p += len(match.group())
  103. print tab+'mem[%d] %s'%(ptr,cal(match.group()))
  104. continue
  105.  
  106. c = s[p]
  107. if c == '[':
  108. stk =
  109. for i,v in enumerate(s[p+:]):
  110. if v == '[':
  111. stk +=
  112. elif v == ']':
  113. stk -=
  114. else:
  115. continue
  116. if stk == :
  117. print tab+'while mem[%d]:'%ptr
  118. ptr = bf2asm(s[p+:p++i],ptr,tab+'\t')
  119. p += i+
  120. break
  121. continue
  122.  
  123. elif c == ',':
  124. if input_ptr < :
  125. print tab+'mov mem[%d] input[input_ptr]'%ptr
  126. else:
  127. if bit_add >= :
  128. print tab+'mov mem[%d] 0x30'%ptr
  129. else:
  130. print tab+'mov mem[%d] 1'%ptr
  131. elif c == '.':
  132. print tab+'cmp mem[%d] data[data_ptr]'%ptr
  133. p +=
  134. return ptr
  135.  
  136. s = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>[->+<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>,>>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>]"
  137. input_ptr =
  138. bit_add =
  139. bf2asm(s,,'')

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

  1. while mem[]:
  2. mem[] -=
  3. while mem[]:
  4. mem[] -=
  5. while mem[]:
  6. mem[] -=
  7. mem[] +=
  8. mem[] +=
  9. while mem[]:
  10. mem[] -=
  11. mem[] +=

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

  1. 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. C# 重启程序本身

    private static void Restart() { Thread thtmp = new Thread(new ParameterizedThreadStart(run)); object ...

  2. 关于文档模式、DCOTYPE声明及严格模式

    1.文档模式 文档模式的概念是由IE5.5引入,通过使用文档类型(DOCTYPE)切换实现的.不同的文档模式主要影响CSS内容的呈现,尤其是浏览器对盒模型的解析,但在某些情况下也会影响到JavaScr ...

  3. grpc ssl使用

    相关链接 http://www.jianshu.com/p/2873a8349ca0

  4. ModelForm的使用

    from django.forms import Form,ModelForm,fields,widgets as wd class QueModelForm(ModelForm): class Me ...

  5. 在web.xml中设置全局编码

    在web.xml中配置 <filter> <filter-name>characterFilter</filter-name> <filter-class&g ...

  6. c/c++中int main(int argc,char *argv[])的具体含义

    int main(int argc,char * argv[ ]) argv为指针的指针 argc为整数 char **argv or: char *argv[ ] or: char argv[ ][ ...

  7. Redis集群官方推荐方案 Redis-Cluster

    Redis-Cluster redis使用中遇到的瓶颈 我们日常在对于redis的使用中,经常会遇到一些问题 1.高可用问题,如何保证redis的持续高可用性. 2.容量问题,单实例redis内存无法 ...

  8. jsp get参数乱码问题

    摘自:username2.iteye.com/blog/1597917个人理解中文传送的时后需要转码: js代码: 要进行两次转码才不会出现乱码(默认为UTF-) encodeURI(encodeUR ...

  9. AngularJS中处理多个promise

    在使用AngularJS中处理promise的时候,有时会碰到需要处理多个promise的情况. 最简单的处理就是每个promise都then.如下: var app = angular.module ...

  10. What is a UINavigationTransitionView

    **AFAIK UINavigationTransitionView is a class used to animate UINavigationController child views aro ...