反汇编能搞python_Brainfuck反汇编-高级版(Python)

import re

def sym2cal(s):if '>' ins:returnlen(s)else:return -len(s)

def cal(s):if '+' ins:return '+= %d'%len(s)else:return '-= %d'%len(s)

def bf2asm(s,ptr,tab):

p= 0l=len(s)while(p

pattern= re.compile(r'([>

match=pattern.match(s[p:])ifmatch:

p+=len(match.group())

groups=match.groups()

ptr1= ptr + sym2cal(groups[0])

ptr2=ptr1for i in xrange(1,4):

ptr2+=sym2cal(groups[i])

ptr3=ptr2for i in xrange(4,12):

ptr3+=sym2cal(groups[i])

print tab+'mem[%d] += mem[%d]*mem[%d]'%(ptr3,ptr2,ptr1)for v ingroups:

ptr+=sym2cal(v)continuepattern= re.compile(r'([>

match=pattern.match(s[p:])ifmatch:

p+=len(match.group())

groups=match.groups()

ptr1=ptrfor i in xrange(3):

ptr1+=sym2cal(groups[i])

ptr2=ptr1for i in xrange(3,11):

ptr2+=sym2cal(groups[i])

print tab+'mem[%d] += mem[%d]'%(ptr2,ptr1)for v ingroups:

ptr+=sym2cal(v)continuepattern= re.compile(r'([>

match=pattern.match(s[p:])ifmatch:

p+=len(match.group())

groups=match.groups()

ptr1= ptr + sym2cal(groups[0])

ptr2= ptr1 + sym2cal(groups[1])

ptr3= ptr2 + sym2cal(groups[2])

print tab+'mem[%d] = mem[%d]'%(ptr1,ptr3)for v ingroups:

ptr+=sym2cal(v)continuepattern= re.compile(r'\[-\]')

match=pattern.match(s[p:])ifmatch:

p+=len(match.group())

print tab+'mem[%d] = 0'%(ptr)continuepattern= re.compile(r'>+')

match=pattern.match(s[p:])ifmatch:

p+=len(match.group())

ptr+=len(match.group())continuepattern= re.compile(r'

match=pattern.match(s[p:])ifmatch:

p+=len(match.group())

ptr-=len(match.group())continuepattern= re.compile(r'\++')

match=pattern.match(s[p:])ifmatch:

p+=len(match.group())

print tab+'mem[%d] %s'%(ptr,cal(match.group()))continuepattern= re.compile(r'-+')

match=pattern.match(s[p:])ifmatch:

p+=len(match.group())

print tab+'mem[%d] %s'%(ptr,cal(match.group()))continuec=s[p]if c == '[':

stk= 1

for i,v in enumerate(s[p+1:]):if v == '[':

stk+= 1elif v== ']':

stk-= 1

else:continue

if stk == 0:

print tab+'while mem[%d]:'%ptr

ptr= bf2asm(s[p+1:p+1+i],ptr,tab+'\t')

p+= i+1

break

continueelif c== ',':if input_ptr < 96:

print tab+'mov mem[%d] input[input_ptr]'%ptrelse:if bit_add >= 3600:

print tab+'mov mem[%d] 0x30'%ptrelse:

print tab+'mov mem[%d] 1'%ptr

elif c== '.':

print tab+'cmp mem[%d] data[data_ptr]'%ptr

p+= 1

returnptr

s= ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>[->+<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>,>>>>>>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>[->>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>]"input_ptr= 0bit_add= 0bf2asm(s,0,'')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值