首页
社区
课程
招聘
[原创]动态调试与静态反汇编合一,运用虚拟机技术创建可逆向运行的调试器
发表于: 2010-8-22 21:00 139029

[原创]动态调试与静态反汇编合一,运用虚拟机技术创建可逆向运行的调试器

2010-8-22 21:00
139029
动态调试与静态反汇编合一,运用虚拟机技术创建可逆向运行的调试器

    现在的软件保护越来越厉害,从早先的加压缩壳、加密,发展到加密壳,虚拟机保护,以及扭曲变换等一系列的混淆手段,使得逆向一个软件的难度越来越大。究其根本原因,是人类天生不适合处理复杂的程序,在看过《代码大全2》之后,我发现作者一直在强调好的程序架构实际是在努力降低程序在管理上的复杂度,一个程序在运行时,至少在三个方面发生着变化,一个是空间:寄存器,内存的值在不断的变化;一个是时间,程序的运行顺序随时间推移而变化;第三个是语义上的变化,到底一段程序干了什么?它的目的是什么?它的实现机制是什么?看一行行的反汇编出来的代码都是很难搞懂的,更何况还有加壳加密这样的混淆手段在作怪,一段程序的二进制代码,再加上哪怕最简单的花指令混淆,都大大增加了复杂度,使得人脑理解它的原理变成一个艰巨的任务。
   
    混淆手段之所以成了逆向道路上的拦路虎,是在于人脑无法把许许多多条枯燥乏味的指令变成一个完整的概念,哪怕就是把两个数相加这样简单的事,编译成二进制代码,再加上花指令混淆,都很难理解它的本意,这就是加壳软件厉害的地方,许多恶意软件借助壳的帮助,逃脱了反病毒人员的逆向分析,在用户的电脑中为非作歹。(下面我把“壳”和混淆代码不加区分的使用了,少打几个字,读起来也简单。)
还有很多软件是用Java,VB这样以虚拟机为基础写的,要想在没有源代码的情况下移植到别的机器上,也是很难的事。而实际上如果能把这些二进制的程序先翻译成一种通用的中间语言,再把这种中间语言翻译成高级语言,就可以很好的利用它们来生产出更多的软件。

    为了达到更有效率的逆向以上这些软件的目的,首先要讨论的是能不能开发出这样一种程序,它能把程序中被混淆的东西暴露出来,去掉那些垃圾代码,把程序原始的面貌展现出来?
   
    我认为是可以的,因为一个很简单的事实:一个加了壳的软件,不论它的代码如何被混淆,它原有的功能不能变化,既不能多做,也不能少做,更不能做错。换句话说,从时间和空间上来看,原来这个程序的执行过程是一根线,加上壳,就多了壳这条线,两条线就像两根有塑料外皮的导线一样,再怎么交织在一起,两根电线中的电流是不会流到一起的,当线与线交织运行一定阶段后,一定要分开来各管各走,这样程序原来的功能才不会被破坏,无论是虚拟机还是扭曲变换,这条基本的定律是不会变的。
   
    然后我从上面这点推导出第二个观点是,壳这条线既然不影响程序的功能,那就是多余的东西,而多余的东西是可以被拿掉的。就是说程序在执行过程中,是可以不去走壳的这条线,也能行得通,而且走起来还快一点,事实上在我看了《编译原理》后发现编译器的代码优化就是起到去除冗余代码的作用的,随便多复杂的混淆代码,只要反汇编出来的汇编语句没有错误,把它放到编译器中优化一下,估计这些冗余代码都活不下去了。而逆向分析人员甚至都没必要去看。这样就大大节省了逆向的工作量。

    上面的这段话中有一个非常重要的条件,就是交给编译器去优化的代码必须是反汇编的时候没有错误的,而很多混淆代码使用了花指令这样的手段,使得静态反汇编出来的东西都是一团乱码,静态反编译因为不能再现程序中真实的变量值的变化,遇上跳转,CALL指令,搞不清是真是假,因为参数是未知的,比如"jmp eax"什么的,这样就大大影响了反汇编的质量,现今为止,没有什么方法能百分之百的静态反汇编成功。

    那么就让我们试试像OD这样的动态调试手段吧,动态调试可以真实地观察程序的运行情况,只要某个程序的片断跟踪过一次,基本上就得到了正确的反汇编代码,但是有三个问题,一是每个程序都有许多的分支,就像一棵树有许多的树梢,而调试器没办法一次走完所有的地方,所以反汇编出来的代码不完整;关于这个问题,可以把程序看成是一棵二叉树之类的东西,反正用个遍历算法,强制遍历一遍所有可用的分支,整个程序的反汇编就出来了吧。

    二是这些代码中有很多的循环,一个循环如果执行了1000遍,OD直接保存代码的话,就把这个循环体重复了1000遍,反汇编出来的代码又很多余。关于这个问题就要一边跟踪调试,一边在反汇编的基础上进行分析,建立基本块,循环体,子过程的结构,初步整理好代码。准备进一步的分析。

    三是OD还有一个很大的问题,就是它跟踪程序的过程不可逆的,我希望在调试程序时,程序运行到哪里,发现了问题,就反过来倒推,这要求保存程序每一步的状态,随时可以退回到前面任意的一个点上。这个问题也许可以试试建立一个数据库来保存相关信息,比如一个寄存器开始是什么值,后来这个值起了什么变化,放到了什么地方,又从什么地方取得了一个什么值,往往这些值是固定的,其实在程序中的各种变量值往往是固定的,从系统初始化开始,一步一步地搬动,加减运算什么的,一路上再怎么变,其实都是固定的数值关系,有些时候看上去好像每次运行都不一样的值,其实处理的方式是一样的,数据流是一样的,控制流也是一样的,要不然这个程序就有毛病了,好端端地运行它两次,结果第一次点“文件”菜单,出来的是“文件”菜单,第二次点变成“帮助”了,每次加减运算的结果都不一样,这样的程序没法用了,不等别人来逆向,自己先被用户抛弃了。所以,即使是系统调用,或者是用户输入,只要我们的调试器模拟输入的参数对路,那么一路上的流程是固定的,变量值的变化也是很容易计算的,关键是要能有个数据库来保存,来随时调用进行推算。

    综上所述,我们必须用动态跟踪的方法,获得跳转的间接路径,还要即时的反汇编出来,还要保存程序的运行状态,还要调用编译器优化来清除混淆代码。这里最好试试虚拟机的技术,在虚拟机中让程序运行,可以把程序和系统隔离开来,防止某些软件发现被调试后恶意地破坏我们的系统。

    这个“动态调试+静态反汇编优化”以去除混淆代码的设想背后是一个巨大的系统工程,想法本身不新鲜,网络上,论坛里,相关的资料和软件都有不少,比如虚拟机脱壳,比如可逆的调试器,但关键是它们没有拧成一股绳,没有在一个高层次的视野下统一起来。当然我只是个业余的编程爱好者,一个人做这样的事肯定是力所不能及的,但既然爱因斯坦那么看重人的想象力,所以我就先幻想一下,然后再一块砖一块砖的去搭建,这里先抛第一块砖吧。

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (124)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
感觉如果对抗加密了的流程,无论是 VM 还是 混淆 有针对性的开发相应的还原插件还是比较容易
楼主的想法不错,可惜真正执行起来那是相当不容易,先期待一下
2010-8-22 22:50
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
3
有点民科的感觉,不过有兴趣可以看看BitBlaze
2010-8-23 01:09
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
4
深夜了,还在奋斗啊,
2010-8-23 01:10
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
谢谢forgot版主的提示,也谢谢其他两位的关注。刚才我突然想到如果在反汇编一段指令时,遇到条件跳转的话,其实是没办法知道它到底是不是真正的有条件跳转,还是混淆视线的。
所以可以用多线程的方法,遇到条件跳转了,就用两个线程分别跟下去反汇编,有哪个线程遇上非法指令了,或者两个线程重叠了,或冲突了,就知道碰上混淆代码了。从而得到正确的流程。这样遍历一下,应该可以得到正确的流程了吧。
条件跳转还好,它们不能使用间接地址,所以可以用两个线程同时去反汇编,而无条件跳转可以用间接地址,一定要计算才能得到,所以还是要动态调试来确定,在原有的程序中用多线程来跟踪进行反汇编,估计是有难度的。所以还是试试用虚拟机的办法,再加上执行流程可逆的特性,应该能正确完整的反汇编整个程序。

我一向是玩“民科”的,就在几年前我发现了用彩电的中频AFT电路可以解调出立体声广播节目,而且实验成功。我这人就是没用的点子特别多,跟灰太狼差不多,所以就用它做头像了。
2010-8-23 04:17
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
继续整理我的思路,我把加密加壳的软件给逆向造成的困难分为以下几个方面:

    1 指令变形,代码冗余。对付这个,就要用到编译器的优化功能,看看到底那些知名的编译器是不是真像它们自己吹嘘的那么牛,编译器优化天生就是对付冗余低效代码的。

    2 垃圾指令,反反汇编。对付这个,就非动态调试莫属了,一边调试,一边反汇编同时进行局部的优化,在重建流程的同时自然去除了垃圾。

    3 暗地设桩,反调试器。对付这个,就用虚拟机把它罩住,让它在沙箱中运行,还检测个毛?再用数据库记录运行的流程,出了事故,顺藤摸瓜,一查就知。

    4 进驻内核,反客为主。对付这个,让自己的驱动先进内核,然后用以上的方法调试壳的驱动,道理是一样的。
2010-8-23 07:44
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
先上传“Packer Genetics: The Selfish Code”,这个ppt展示的是使用Bochs作为脱壳用的虚拟机,我认为这应该是个好主意,至少大多数想检测调试器的壳,要辛苦一点了。
另外Bochs是开源的软件,我们可以比较容易的扩展它的功能,网上就有人用windbg通过串口来调试bochs里的windows系统,他自己编写了bochs中串口的命名管道功能。
除此之外Bochs也能保存系统快照,可以和GDB配合进行调试,加上我原来设想的用数据库管理数据等方法,随时把进程的运行回溯到某一个点上,可以像神一样把应用程序玩弄于鼓掌之间了吧。
Bochs的速度是慢的,因为它要模拟每一条指令,但是现在的电脑运算速度这么快,ppt中就用了i7来脱壳,还是蛮快的。
2010-8-23 11:09
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
这里还有同样想法的,当然他也遇到了不少问题:

http://www.damogran.de/blog/archives/18-Pandoras-Bochs.html

这里转他的原文:“At the end of January I handed in my thesis “Pandora's Bochs: Automatic Unpacking of Malware”, the last missing piece towards my graduation. It deals with building an automatic unpacker for runtime-packed PE binaries on top of the Bochs PC Emulator. The results were encouraging, but I hit some limits with Bochs's emulation speed, and there were also other issues with advanced packers that I could not fully investigate. Other than that, Pandora's Bochs can fairly reliably create memory dumps of an unpacked process, yet automatic import recovery and OEP reconstruction fail for packers that redirect imports or use “stolen bytes” or similar techniques.

I'm planning to release Pandora's Bochs's source code once I find some time to clean it up a little. ”

再发一下他的paper
上传的附件:
2010-8-23 11:22
0
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
9
这会牵涉到路径爆炸的问题
  不知道楼主考虑过没
2010-8-23 12:08
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
其实可以放弃的,普通的流程加密+加花好办些,VM 的机制就可以阻挡你的脚步
那是任何编译器无法自动优化的,当然人脑可以。。。。并且它也不会真的有多复杂
哦,如果 假如那天你真的开发成功了 (VM 机制除外 )你可以为他开发针对性的插件作为补充

期待。。。。。。。。。。。。。。。。。。。。。。。
2010-8-23 12:44
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
这里传一篇文章,是谈到关于收缩多路径搜索范围的。不知道有没有用。
上传的附件:
2010-8-23 13:21
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
12
这种跳转叫opaque predication,本身是不可判定的。比如两个分支都跳到有意义的地方,无法分辨是一个循环还是一个陷阱,只能拼军备,通过添加启发式来解决。不过通过抽象解释可以解决很大一部分。
2010-8-23 13:24
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
VM为什么不能优化?编译原理中谈到优化的时候,它是把代码划成一个个小的基本块,然后做结构分析,数据流分析,建立数据流方程,再求解,一个VM再怎么厉害,只要
“建立了程序流程及结构,特别是循环,然后对数据流进行分析,程序中的变量或是以赋值或读入这类定值的方式出现,或者是以引用的方式出现,数据流分析就是分析程序中所有变量的定值和引用之间的关系。”
这是在编译原理的书上照抄的,难道人脑分析VM代码就不需要遵循这个规律了吗?把一个VM中的每一个数据的变化流程搞清楚了,哪些代码是可以精简的就一目了然了,也许最后的结果不一定能恢复到原始的样子,但功能一定是一样的。

再怎么说,像把 " add eax,5" 这样的代码变成 5个 "inc eax"之类的变形,用优化的办法来去除远比看到一种,然后想办法写特定的反变形脚本要容易得多吧。当然首先要看编译器有没有这个本事。

这里我放个链接,
http://d.wanfangdata.com.cn/Periodical_jsjkx200802023.aspx

这篇论文是要花钱才能下载的,我没下,但是看看他的介绍,其实就是在抄汇编器优化的介绍啊。

“新出现的恶意代码大部分是在原有恶意代码基础上修改转换而来.许多变形恶意代码更能自动完成该过程,由于其特征码不固定,给传统的基于特征码检测手段带来了极大挑战.采用归一化方法,并结合使用传统检测技术是一种应对思路.本文针对指令乱序这种常用变形技术提出了相应的归一化方案.该方案先通过控制依赖分析将待测代码划分为若干基本控制块,然后依据数据依赖图调整各基本控制块中的指令顺序,使得不同变种经处理后趋向于一致的规范形式.该方案对指令乱序的两种实现手段,即跳转法和非跳转法,同时有效.最后通过模拟测试对该方案的有效性进行了验证.”
2010-8-23 13:37
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
配合人脑的最好工具是有一个能自动记录每一个运行步骤,并能回放的调试器,而且代码的自动优化可以去除这些羊肠小道上的局部的变形膨胀代码,减轻分析人员一部分的工作量,到最后也许自动分析因为程序中太多的陷阱而速度慢到要死,但这样的程序往往在自己正常运行时也是效率低下,没有什么实际的用处了。
2010-8-23 13:45
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
15
不知道跟这篇是否一样。
http://cjc.ict.ac.cn/quanwenjiansuo/2010-3/ck.pdf

基本上是个用户态钩子,和简单的数据流方程,被一堆定义包装了一下就充数,真是恶。
2010-8-23 13:46
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
16
当然可以优化。只是有的比较困难。
2010-8-23 13:50
0
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
17
谢谢你提供的资料
2010-8-23 13:56
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
本坛有位人士已经提供了用编译器优化来反混淆的例子了,我实在是太孤陋寡闻了,另一方面原因是我不喜欢.Net编程。实际上微软的东东我一个也不喜欢,我是被逼无奈,迫不得已才研究这个的。

http://bbs.pediy.com/showthread.php?threadid=37217

这里我贴几段他的原文:

1)反编译与反混淆的基础
这里说的基础是在编译原理之类书藉在讲到编译优化时要说的东东,就是要建立程序流图,因为将基于栈的IL反编译成基于
变量与表达式的高级语言关键在于保证数据流的正确性,而数据流是在控制流的框架内维持的,所以我们首先需要为每个
函数建立其程序流图,流图的每个结点就是一个基本块,基本块内我们只要按前面说堆栈混淆时的那种堆栈分析方法来生成
表达式即可(相当于解释执行IL),在基本块与基本块之间则需要考虑块间暂存在堆栈中的数据的一致性问题。
事实上,程序流图的建立还用于像来回跳转这种优化以及识别分支与循环结构这种高级语言结构上


可能我表达的不太清楚,我主要是想利用高级语言编译器的优化能力来实现反混淆,因为要利用高级语言编译器,所以首先得将IL反编译成高级语言语法。
switch的处理主要是考虑用switch跳转表作goto的这种情况,reflector里就有很多这样的,我在文中给出的变换就是将这种goto直接还原,之后的工作由C++编译器来优化。
后面说的程序流图不是有许多现成工具会生成,而是说用程序流图来识别循环与
来回跳转的优化是多数编译器的基本优化功能。
反编译工具的主要思路是将IL等价变换为高级语言,我主要是考虑到现有的反编译工具多数不能正确处理基于堆栈的混淆,重点也是解决这个问题,至于来回跳转那些混淆,编译优化能很好处理,所以我在反编译时不处理。
反编译工具的工作过程:
1、对IL文件进行词法、语法分析(我用的gppg语法分析程序生成器,你用flex+bison也可以,这个看你用的编程语言了),提取名空间、类、方法、方法实现指令的信息;
2、建立类之间的依赖关系图(因为我要生成的C++,必须自己解决交叉引用问题,若是C#则不需要建立这个);
3、对方法实现部分建立程序流图,异常块表;
4、对流图的每个基本块进行模拟IL执行(主要是堆栈的操作),生成计算表达式,临时变量,异常块间跳转的goto目标调整,用switch跳转表实现的goto的调整等;
5、将基本块间堆栈传递的数据记录为临时变量;
6、输出最终C++代码。
2010-8-23 14:03
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
就是这篇,启发作用还是有的。
2010-8-23 14:07
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
20
Talk is cheap. Show me the code. ~Linus Torvalds
2010-8-23 14:33
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
i show the code below:

为了看看现在主流的汇编器能否优化掉简单的变形代码,我写了个test1.asm

inc eax
inc eax
inc eax
inc eax

其实就是 add eax,4吧,然后用nasm,gas,fasm来汇编,nasm有优化选项,开到最大:Ox。结果都是一样根本没有什么优化,照样是这几条指令。

00000000  6640              inc eax
00000002  6640              inc eax
00000004  6640              inc eax
00000006  6640              inc eax

重新看了文档,总算搞清楚了gcc是在中间代码进行优化,等优化后送到as的已经是优化后的结果了。
nasm的优化只是字节长短的变化,跳转地址的远近而已,才没有数据流分析和优化这回事。

看起来投机取巧是行不通了,至少是要把那个gcc的编译器上的中间代码优化,在汇编指令作为输入的基础上重新改写一遍了。
2010-8-23 16:28
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
22
Understand what's the code first.
2010-8-23 16:40
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
继续尝试用简单的方法做优化,我想到了的gcc的内联汇编,写了小程序:

void main (){

     __asm__ (
         "inc %eax \n\t"
         "inc %eax \n\t"
         "inc %eax \n\t"
         "inc %eax \n\t"
          );

}

编译结果依然是不能优化。

而当我用c语言模拟时,打开优化选项,确实看到编译后的代码被优化了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main (){

  int x = 1;
  x ++;
  x ++;
  x ++;
  x ++;

  printf ("%d",x);

}

所以我想想,还是试试把汇编代码转换成gcc的中间代码RTL吧,根据网上看来的资料,gcc做优化,就是针对RTL的,把汇编代码转换成RTL,再让gcc优化一下,然后输出成汇编。做这件事的难度是要看gcc的源码,看看RTL转汇编的规则是什么,能不能倒过来。

这里有人尝试了,但没有提供那个ASM2RTL的工具。
上传的附件:
2010-8-23 21:34
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
24
这里是 VMP 在一个循环里比较 4 个字节,一个不过关就失败,先来看看失败的

(我把 FVM 的过滤功能减去一大半 , 贴出来  ( 经过滤后会把 “它”认为无用的去掉 ),这里就单单贴出了 2 个 H 的记录,如果连上算法,超过 2 W 个分支(绝大多数相同,关键你要还原),你如何搞,人脑可以用思维去判断,优化器就需要另外干多很多东西,还有你需要完全了解它的特性,所以我认为你的想法真的有点困难

            vm_nor  :  not 79BC0130 , not FFBEEBF3      and  8643FECF , 41140C = 41140C               
            vm_add  :  B86F40FD  +  4790BF0B  =  8                                                   
            vm_nor  :  not A9050068 , not FFBF16FC      and  56FAFF97 , 40E903 = 40E903               
            vm_add  :  BD73AEBC  +  428C5148  =  4                                                   
            vm_add  :  588D2C8C  +  A7B3BC2A  =  40E8B6                                               
            vm_add  :  96A17EE1  +  98651624  =  2F069505                                             
            vm_add  :  2F069505  +  D0F969FB  =  FFFFFF00                                             
            vm_add  :  E6A36D80  +  199DA6EB  =  41146B                                               
            vm_add  :  60CED6A6  +  9F312959  =  FFFFFFFF                                             
            vm_nor  :  not 4080B0 , not FFFFFFFF      and  FFBF7F4F , 0 = 0                           
            vm_nor  :  not FFFFFFFE , not FFFFFFFE      and  1 , 1 = 1                                
            vm_add  :  417E40B3  +  BEC2D172  =  411225                                               
            vm_add  :  5E8BB4F2  +  3111DA4  =  619CD296                                             
            vm_nor  :  not FFFFFFFF , not FFFFFFFF      and  0 , 0 = 0                                
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_nor  :  not FFFFFFFF , not 3F986B53      and  0 , C06794AC = 0                        
            vm_nor  :  not 0 , not 3F986B53      and  FFFFFFFF , C06794AC = C06794AC                  
            vm_add  :  C59E089B  +  3A61F765  =  0                                                   
            vm_nor  :  not C06794AC , not C06794AC      and  3F986B53 , 3F986B53 = 3F986B53           
            vm_nor  :  not C06794AC , not 3F986B53      and  3F986B53 , C06794AC = 0                  
            vm_nor  :  not C06794AC , not 3F986B53      and  3F986B53 , C06794AC = 0                  
            vm_add  :  EE83E5A4  +  11BD01D3  =  40E777                                               
            vm_add  :  6DA7047  +  84CB7C2F  =  8BA5EC76                                             
            vm_add  :  8BA5EC76  +  B4335FD6  =  3FD94C4C                                             
            vm_nor  :  not A990CB80 , not FFBEEFC1      and  566F347F , 41103E = 41103E               
            vm_add  :  51822A83  +  510C8661  =  A28EB0E4                                             
            vm_add  :  A28EB0E4  +  9D49EC19  =  3FD89CFD                                             
            vm_nor  :  not 36260280 , not FFBF1688      and  C9D9FD7F , 40E977 = 40E977               
            vm_add  :  7F4E27A1  +  80B1D85F  =  0                                                   
            vm_nor  :  not 71B20A94 , not FFBEEFB6      and  8E4DF56B , 411049 = 411049               
            vm_nor  :  not 97341605 , not FFBF175D      and  68CBE9FA , 40E8A2 = 40E8A2               
            vm_add  :  4BCB645B  +  F17658B9  =  3D41BD14                                             
            vm_add  :  3D41BD14  +  C2BE42AB  =  FFFFFFBF                                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not 4 , not 4      and  FFFFFFFB , FFFFFFFB = FFFFFFFB                        
            vm_nor  :  not C06794AC , not FFFFFFFB      and  3F986B53 , 4 = 0                        
            vm_nor  :  not 3F986B53 , not 4      and  C06794AC , FFFFFFFB = C06794A8                  
            vm_nor  :  not C06794A8 , not 0      and  3F986B57 , FFFFFFFF = 3F986B57                  
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFD68      and  815 , 297 = 15                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFFF  =  FFFFFFFE                                             
            vm_nor  :  not FFFFFD68 , not FFFFFD68      and  297 , 297 = 297                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD68      and  40 , 297 = 0                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 3F986B53 , not 0      and  C06794AC , FFFFFFFF = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_nor  :  not 283 , not 283      and  FFFFFD7C , FFFFFD7C = FFFFFD7C                     
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFD7C      and  815 , 283 = 1                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFFE  =  FFFFFFFD                                             
            vm_nor  :  not FFFFFD6C , not FFFFFD6C      and  293 , 293 = 293                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD6C      and  40 , 293 = 0                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 3F986B53 , not 0      and  C06794AC , FFFFFFFF = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_nor  :  not 213 , not 213      and  FFFFFDEC , FFFFFDEC = FFFFFDEC                     
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFDEC      and  815 , 213 = 11                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFFD  =  FFFFFFFC                                             
            vm_nor  :  not FFFFFD68 , not FFFFFD68      and  297 , 297 = 297                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD68      and  40 , 297 = 0                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 3F986B53 , not 0      and  C06794AC , FFFFFFFF = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFDE8      and  815 , 217 = 15                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFFC  =  FFFFFFFB                                             
            vm_nor  :  not FFFFFD68 , not FFFFFD68      and  297 , 297 = 297                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD68      and  40 , 297 = 0                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 3F986B53 , not 0      and  C06794AC , FFFFFFFF = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_nor  :  not 213 , not 213      and  FFFFFDEC , FFFFFDEC = FFFFFDEC                     
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFDEC      and  815 , 213 = 11                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFFB  =  FFFFFFFA                                             
            vm_nor  :  not FFFFFD68 , not FFFFFD68      and  297 , 297 = 297                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD68      and  40 , 297 = 0                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 3F986B53 , not 0      and  C06794AC , FFFFFFFF = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFDE8      and  815 , 217 = 15                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFFA  =  FFFFFFF9                                             
            vm_nor  :  not FFFFFD68 , not FFFFFD68      and  297 , 297 = 297                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD68      and  40 , 297 = 0                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 3F986B53 , not 0      and  C06794AC , FFFFFFFF = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFDE8      and  815 , 217 = 15                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFF9  =  FFFFFFF8                                             
            vm_nor  :  not FFFFFD68 , not FFFFFD68      and  297 , 297 = 297                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD68      and  40 , 297 = 0                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 3F986B53 , not 0      and  C06794AC , FFFFFFFF = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_nor  :  not 213 , not 213      and  FFFFFDEC , FFFFFDEC = FFFFFDEC                     
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFDEC      and  815 , 213 = 11                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFF8  =  FFFFFFF7                                             
            vm_nor  :  not FFFFFD6C , not FFFFFD6C      and  293 , 293 = 293                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD6C      and  40 , 293 = 0                             
            vm_nor  :  not 3FD94C4C , not 3FD94C4C      and  C026B3B3 , C026B3B3 = C026B3B3           
            vm_nor  :  not C06794AC , not C026B3B3      and  3F986B53 , 3FD94C4C = 3F984840           
            vm_nor  :  not 3FD94C4C , not 3F986B53      and  C026B3B3 , C06794AC = C02690A0           
            vm_nor  :  not C02690A0 , not 3F984840      and  3FD96F5F , C067B7BF = 41271F            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 3F986B53 , not 0      and  C06794AC , FFFFFFFF = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_add  :  C72BBFAE  +  3915539B  =  411349                                               
            vm_add  :  68C5F38D  +  973A1488  =  815                                                  
            vm_nor  :  not FFFFF7EA , not FFFFFD79      and  815 , 286 = 4                           
            vm_add  :  1346A58B  +  ECFA42B0  =  40E83B                                               
            vm_add  :  F4BCEA8E  +  B430D5C  =  FFFFF7EA                                             
            vm_nor  :  not C8BC5768 , not FFFFF7EA      and  3743A897 , 815 = 815                     
            vm_add  :  4  +  242  =  246                                                         : 1D0
            vm_nor  :  not DA386C00 , not FFBEEE08      and  25C793FF , 4111F7 = 4111F7               
            vm_add  :  A09770F8  +  5FA97857  =  40E94F                                               
            vm_add  :  91580DA1  +  3BA22BFE  =  CCFA399F                                             
            vm_add  :  CCFA399F  +  3305C260  =  FFFFFBFF                                             
            vm_add  :  D345CBD1  +  2CFB1E6B  =  40EA3C                                               
            vm_add  :  97F19C2D  +  B6230410  =  4E14A03D                                             
            vm_add  :  4E14A03D  +  B1EB5FC2  =  FFFFFFFF                                             
            vm_add  :  2  +  FFFFFFFF  =  1                                                         :
            vm_nor  :  not 23B4F2A0 , not FFBEF2A5      and  DC4B0D5F , 410D5A = 410D5A               
            vm_add  :  90D8EDC  +  31862A0C  =  3A93B8E8                                             
            vm_add  :  3A93B8E8  +  544E415  =  3FD89CFD                                             
            vm_nor  :  not D8C0007 , not FFBF178F      and  F273FFF8 , 40E870 = 40E870               
            vm_add  :  9D9FD6D0  +  378B5775  =  D52B2E45                                             
            vm_add  :  D52B2E45  +  6AAE1E07  =  3FD94C4C                                             
            vm_add  :  E8052BB3  +  183BE335  =  410EE8                                               
            vm_add  :  A9BB2087  +  6CCCB23F  =  1687D2C6                                             
            vm_add  :  1687D2C6  +  E9782D39  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  FFFFFFF7  =  FFFFFFF6                                             
            vm_nor  :  not FFFFFD28 , not FFFFFD28      and  2D7 , 2D7 = 2D7                          
            vm_add  :  AF9440A8  +  50ACCD52  =  410DFA                                               
            vm_nor  :  not 2D7 , not 2D7      and  FFFFFD28 , FFFFFD28 = FFFFFD28                     
            vm_add  :  2766C1A5  +  D8DA2817  =  40E9BC                                               
            vm_add  :  EA96DD67  +  C4B6302C  =  AF4D0D93                                             
            vm_add  :  AF4D0D93  +  50B2F22C  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFD28      and  40 , 2D7 = 40                           
            vm_nor  :  not 3FD89CFD , not 3FD89CFD      and  C0276302 , C0276302 = C0276302           
            vm_nor  :  not C06794AC , not C0276302      and  3F986B53 , 3FD89CFD = 3F980851           
            vm_nor  :  not 3FD89CFD , not 3F986B53      and  C0276302 , C06794AC = C0270000           
            vm_nor  :  not C0270000 , not 3F980851      and  3FD8FFFF , C067F7AE = 40F7AE            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not C06794AC , not FFFFFFFF      and  3F986B53 , 0 = 0                        
            vm_nor  :  not 0 , not 3F986B53      and  FFFFFFFF , C06794AC = C06794AC                  
            vm_nor  :  not C06794AC , not 0      and  3F986B53 , FFFFFFFF = 3F986B53                  
            vm_nor  :  not FFFFFFF6 , not FFFFFFF6      and  9 , 9 = 9                                
            vm_nor  :  not F8944212 , not FFBED6D2      and  76BBDED , 41292D = 41292D               
            vm_add  :  EA1A30C4  +  15E5CF3B  =  FFFFFFFF                                             
            vm_add  :  FFFFFFFF  +  9  =  8                                                         :
            vm_add  :  4AC73004  +  B579DD13  =  410D17                                               
            vm_add  :  A896E0A8  +  57691F60  =  8                                                   
            vm_nor  :  not 8 , not 8      and  FFFFFFF7 , FFFFFFF7 = FFFFFFF7                        
            vm_add  :  8  +  FFFFFFF7  =  FFFFFFFF                                                   
            vm_nor  :  not FFFFFFFF , not FFFFFFFF      and  0 , 0 = 0                                
            vm_add  :  FDC32922  +  27DBE66  =  40E788                                                
            vm_add  :  DA08C6A7  +  D5EB1075  =  AFF3D71C                                             
            vm_add  :  AFF3D71C  +  500C20CE  =  FFFFF7EA                                             
            vm_nor  :  not FFFFF7EA , not FFFFFD79      and  815 , 286 = 4                           
            vm_nor  :  not D1931655 , not FFBF167D      and  2E6CE9AA , 40E982 = 40E982               
            vm_add  :  8E68B6D7  +  CFD63843  =  5E3EEF1A                                             
            vm_add  :  5E3EEF1A  +  A1C118FB  =  815                                                  
            vm_add  :  4  +  242  =  246                                                         : 20B
            vm_add  :  8A84F7A2  +  75BC1A4F  =  4111F1                                               
            vm_add  :  96EF7A62  +  A34339A4  =  3A32B406                                             
            vm_nor  :  not 32222400 , not 3A32B406      and  CDDDDBFF , C5CD4BF9 = C5CD4BF9           
            vm_nor  :  not 61008808 , not FFBED948      and  9EFF77F7 , 4126B7 = 4126B7               
            vm_add  :  3DE2B702  +  DFDFBAF2  =  1DC271F4                                             
            vm_add  :  1DC271F4  +  A80ADBCB  =  C5CD4DBF                                             
            vm_nor  :  not 93049405 , not FFBED797      and  6CFB6BFA , 412868 = 412868               
            vm_nor  :  not 6C12E004 , not FFBEF244      and  93ED1FFB , 410DBB = 410DBB               
            vm_add  :  A54AD705  +  415183BD  =  E69C5AC2                                             
            vm_add  :  E69C5AC2  +  1963A4FD  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFFDB9      and  40 , 246 = 40                           
            vm_nor  :  not C5CD4BF9 , not C5CD4BF9      and  3A32B406 , 3A32B406 = 3A32B406           
            vm_nor  :  not 3A725E8E , not 3A32B406      and  C58DA171 , C5CD4BF9 = C58D0171           
            vm_nor  :  not C5CD4BF9 , not C58DA171      and  3A32B406 , 3A725E8E = 3A321406           
            vm_nor  :  not 3A321406 , not C58D0171      and  C5CDEBF9 , 3A72FE8E = 40EA88            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not 3A725E8E , not FFFFFFFF      and  C58DA171 , 0 = 0                        
            vm_nor  :  not C58DA171 , not 0      and  3A725E8E , FFFFFFFF = 3A725E8E                  
            vm_nor  :  not 3A725E8E , not 0      and  C58DA171 , FFFFFFFF = C58DA171                  
            vm_nor  :  not 52A30708 , not FFBF0719      and  AD5CF8F7 , 40F8E6 = 40F8E6               
            vm_add  :  220069AF  +  4A461066  =  6C467A15                                             
            vm_add  :  6C467A15  +  93B984EB  =  FFFFFF00                                             
            vm_add  :  3104AB3C  +  CF3C4345  =  40EE81                                               
            vm_add  :  4D654FB2  +  B29AB14D  =  FF                                                   
            vm_nor  :  not 49 , not FF      and  FFFFFFB6 , FFFFFF00 = FFFFFF00        

               
            vm_nor  :  not 3433F0C6 , not 3433F0C6      and  CBCC0F39 , CBCC0F39 = CBCC0F39           
            vm_nor  :  not CBCC0F39 , not FFFFFF00      and  3433F0C6 , FF = C6                       
            vm_nor  :  not 91386124 , not FFBEF137      and  6EC79EDB , 410EC8 = 410EC8               
            vm_add  :  CAEFE74A  +  BC8BCD7F  =  877BB4C9                                             
            vm_add  :  877BB4C9  +  78844BFD  =  C6                                                   
            vm_nor  :  not C6 , not C6      and  FFFFFF39 , FFFFFF39 = FFFFFF39      我输入的         
            vm_add  :  C6  +  FFFFFF39  =  FFFFFFFF                                                   
            vm_nor  :  not FFFFFFFF , not FFFFFFFF      and  0 , 0 = 0                                          
            vm_nor  :  not 36353433 , not 36353433      and  C9CACBCC , C9CACBCC = C9CACBCC   
            vm_nor  :  not C9CACBCC , not FFFFFF00      and  36353433 , FF = 33                                 
            vm_add  :  FE3E80D  +  F01C1723  =  FFFFFF30                                             
            vm_nor  :  not A8DAFC20 , not FFFFFF30      and  572503DF , CF = CF                    
            vm_nor  :  not 33 , not 33      and  FFFFFFCC , FFFFFFCC = FFFFFFCC                       
            vm_add  :  CF  +  FFFFFFCC  =  9B                                                               
        vm_nor  :  not 9B , not 9B      and  FFFFFF64 , FFFFFF64 = FFFFFF64                                       
            vm_add  :  5FF9515B  +  A0479B39  =  40EC94                                               
            vm_add  :  EC666D7A  +  2214B58  =  EE87B8D2                                             
            vm_add  :  EE87B8D2  +  11783F18  =  FFFFF7EA                                             
            vm_nor  :  not FFFFF7EA , not FFFFFDEC      and  815 , 213 = 11                           
            vm_nor  :  not EF390021 , not FFBF0023      and  10C6FFDE , 40FFDC = 40FFDC               
            vm_add  :  339D48AF  +  CC62AF3B  =  FFFFF7EA                                             
            vm_nor  :  not F035060A , not FFFFF7EA      and  FCAF9F5 , 815 = 815                     
            vm_nor  :  not 2E080212 , not FFBF0696      and  D1F7FDED , 40F969 = 40F969               
            vm_add  :  97E8C1E0  +  C09CFCE1  =  5885BEC1                                             
            vm_add  :  5885BEC1  +  53FB87C1  =  AC814682                                             
            vm_nor  :  not 550F0C48 , not FFBF0D4A      and  AAF0F3B7 , 40F2B5 = 40F2B5               
            vm_add  :  514570D9  +  3A69FA20  =  8BAF6AF9                                             
            vm_add  :  8BAF6AF9  +  20D14DD8  =  AC80B8D1                                             
            vm_nor  :  not 8D961002 , not FFBF1682      and  7269EFFD , 40E97D = 40E97D               
            vm_add  :  FFBF1682  +  7269EFFD  =  7229067F                                             
            vm_add  :  B9E51E9  +  F4A2C29E  =  411487                                                
            vm_add  :  7549F522  +  F1B9C27A  =  6703B79C                                             
            vm_add  :  6703B79C  +  98FC4823  =  FFFFFFBF                                             
            vm_add  :  293  +  40  =  2D3                                                        
            vm_nor  :  not AC814682 , not AC814682      and  537EB97D , 537EB97D = 537EB97D           
            vm_nor  :  not 533FBB70 , not 537EB97D      and  ACC0448F , AC814682 = AC804482           
            vm_nor  :  not AC814682 , not ACC0448F      and  537EB97D , 533FBB70 = 533EB970           
            vm_nor  :  not 533EB970 , not AC804482      and  ACC1468F , 537FBB7D = 41020D            
            vm_add  :  3A61F765  +  C59E089B  =  0                                                   
            vm_nor  :  not 41020D , not 41020D      and  FFBEFDF2 , FFBEFDF2 = FFBEFDF2               
            vm_nor  :  not 533FBB70 , not FFBEFDF2      and  ACC0448F , 41020D = 40000D               
            vm_nor  :  not 41020D , not ACC0448F      and  FFBEFDF2 , 533FBB70 = 533EB970            
            vm_nor  :  not 533EB970 , not 40000D      and  ACC1468F , FFBFFFF2 = AC814682            
            vm_nor  :  not 3EA6F601 , not FFBEFFC5      and  C15909FE , 41003A = 41003A               
            vm_add  :  B835C15  +  9A2E4B4B  =  A5B1A760                                             
            vm_add  :  A5B1A760  +  5A8ED8D0  =  408030                                               
            vm_nor  :  not 89A60000 , not FFBF18D4      and  7659FFFF , 40E72B = 40E72B               
            vm_add  :  AEA2DBAD  +  61D57D18  =  107858C5                                             
            vm_add  :  107858C5  +  EFC8B1F8  =  410ABD                                               
            vm_nor  :  not F7B89342 , not FFBEDB42      and  8476CBD , 4124BD = 4124BD               
            vm_add  :  1FC4AD78  +  7C3E6D20  =  9C031A98                                             
            vm_add  :  9C031A98  +  643CF67F  =  401117                                               
            vm_nor  :  not 7D3112A9 , not FFBF13A9      and  82CEED56 , 40EC56 = 40EC56               
            vm_add  :  FFBF13A9  +  82CEED56  =  828E00FF                                             
            vm_nor  :  not 9AE0105 , not FFBF0955      and  F651FEFA , 40F6AA = 40F6AA               
            vm_nor  :  not A86 , not A86      and  FFFFF579 , FFFFF579 = FFFFF579                     
            vm_nor  :  not 400C2C90 , not FFBEECDF      and  BFF3D36F , 411320 = 411320               
            vm_add  :  2165CA9C  +  E883F4A  =  2FEE09E6                                             
            vm_add  :  2FEE09E6  +  D011F5D9  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFF579      and  40 , A86 = 0                             
            vm_nor  :  not 4EB61C27 , not FFBF3CEF      and  B149E3D8 , 40C310 = 40C310               
            vm_add  :  2006D2BC  +  E039F05C  =  40C318                                               
            vm_add  :  72E083DC  +  8D606000  =  40E3DC                                               
            vm_add  :  EA  +  40E3DC  =  40E4C6                                                      
            vm_add  :  AD620438  +  52DEBEE5  =  40C31D                                               
            vm_nor  :  not 4C221881 , not FFBF3CE1      and  B3DDE77E , 40C31E = 40C31E               
            vm_add  :  3916BBE0  +  C6E94424  =  4                                                   
            vm_add  :  40E4C6  +  4  =  40E4CA                                                        
            vm_nor  :  not 3004C5A , not 3004C5A      and  FCFFB3A5 , FCFFB3A5 = FCFFB3A5            
            vm_nor  :  not F71D0804 , not FFBF3CDD      and  8E2F7FB , 40C322 = 40C322               
            vm_add  :  9904C7FD  +  66FB3807  =  4                                                   
            vm_nor  :  not 9B1C1999 , not FFBF3BBD      and  64E3E666 , 40C442 = 40C442               
            vm_add  :  FFBF3BBD  +  64E3E666  =  64A32223                                             
            vm_nor  :  not FFFF296C , not FFFF296C      and  D693 , D693 = D693                       
            vm_nor  :  not B7060020 , not FFBF3BBB      and  48F9FFDF , 40C444 = 40C444               
            vm_add  :  163EFD1F  +  E9C102E2  =  1                                                   
            vm_add  :  D693  +  1  =  D694                                                   
            vm_add  :  37F60AE6  +  C809F519  =  FFFFFFFF                                             
            vm_add  :  D694  +  FFFFFFFF  =  D693                                                     
            vm_nor  :  not D7B101C7 , not FFBF03E7      and  284EFE38 , 40FC18 = 40FC18               
            vm_add  :  41F8AF3B  +  BE4750C5  =  400000                                               
            vm_add  :  D693  +  400000  =  40D693                                                     
            vm_add  :  CDDBCB06  +  322434FF  =  5                                                   
            vm_add  :  40E4C6  +  5  =  40E4CB                                                        
            vm_add  :  F3B1B102  +  C4E4EFE  =  0                                                     
            vm_add  :  3AA97804  +  C5977740  =  40EF44                                               
            vm_add  :  B952664B  +  466C8F2F  =  FFBEF57A                                             
            vm_nor  :  not E12A2100 , not FFBEF57A      and  1ED5DEFF , 410A85 = 410A85               
            vm_add  :  457BE74B  +  BAC53B81  =  4122CC                                               
            vm_add  :  7091383A  +  8FAFC58E  =  40FDC8                                               
            vm_nor  :  not A82 , not A82      and  FFFFF57D , FFFFF57D = FFFFF57D                     
            vm_nor  :  not 73350822 , not FFBF08BA      and  8CCAF7DD , 40F745 = 40F745               
            vm_add  :  1C470EC9  +  50C43F4F  =  6D0B4E18                                             
            vm_add  :  6D0B4E18  +  92F4B1A7  =  FFFFFFBF                                             
            vm_nor  :  not FFFFFFBF , not FFFFF57D      and  40 , A82 = 0                             
            vm_nor  :  not 6EA71A20 , not FFBF3BA9      and  9158E5DF , 40C456 = 40C456               
            vm_add  :  FFBF3BA9  +  9158E5DF  =  91182188                                             
            vm_add  :  BEF13969  +  414F8AEF  =  40C458                                               
            vm_add  :  910B4B7D  +  6F357EA9  =  40CA26                                               
            vm_add  :  694D476  +  F9AC0F66  =  40E3DC                                                
            vm_add  :  13B  +  40E3DC  =  40E517                                                      
            vm_add  :  993FCEFB  +  66C03109  =  4                                                   
            vm_add  :  40E517  +  4  =  40E51B                                                        
            vm_nor  :  not 3005C24 , not 3005C24      and  FCFFA3DB , FCFFA3DB = FCFFA3DB            
            vm_add  :  DFD4BF8E  +  206C0AA0  =  40CA2E                                               
            vm_add  :  E2C3E5F  +  F1D3C1A5  =  4                                                     
            vm_nor  :  not FFFF36E8 , not FFFF36E8      and  C917 , C917 = C917                       
            vm_add  :  3D093E78  +  C2F6C189  =  1                                             
            vm_add  :  C917  +  1  =  C918                                                      
            vm_nor  :  not 6DAD2580 , not FFBF35C3      and  9252DA7F , 40CA3C = 40CA3C               
            vm_add  :  5CF09920  +  A30F66DF  =  FFFFFFFF                                             
            vm_add  :  C918  +  FFFFFFFF  =  C917                                                     
            vm_add  :  A9222C58  +  571ED3AC  =  410004                                               
            vm_add  :  D70B59D4  +  2934A62C  =  400000                                               
            vm_add  :  C917  +  400000  =  40C917                                                     
            vm_add  :  FDD1E688  +  26EE3B8  =  40CA40                                                
            vm_add  :  609173C  +  F9F6E8C9  =  5                                                     
            vm_add  :  40E517  +  5  =  40E51C                                                        
            vm_add  :  118525C8  +  EE7ADA38  =  0                                                   
            vm_nor  :  not C6 , not C6      and  FFFFFF39 , FFFFFF39 = FFFFFF39                       
            vm_nor  :  not 695337A , not FFFFFF39      and  F96ACC85 , C6 = 84                        
            vm_nor  :  not C6 , not F96ACC85      and  FFFFFF39 , 695337A = 6953338                  
            vm_nor  :  not 6953338 , not 84      and  F96ACCC7 , FFFFFF7B = F96ACC43                  
            vm_nor  :  not 5537F17F , not FFFFFFFF      and  AAC80E80 , 0 = 0                        
            vm_nor  :  not 0 , not AAC80E80      and  FFFFFFFF , 5537F17F = 5537F17F                  
            vm_nor  :  not 5537F17F , not 0      and  AAC80E80 , FFFFFFFF = AAC80E80                  
            vm_nor  :  not 33 , not 33      and  FFFFFFCC , FFFFFFCC = FFFFFFCC                       
            vm_nor  :  not 7B44E961 , not FFFFFFCC      and  84BB169E , 33 = 12                       
            vm_nor  :  not 84BB169E , not 33      and  7B44E961 , FFFFFFCC = 7B44E940                 
            vm_nor  :  not 7B44E940 , not 12      and  84BB16BF , FFFFFFED = 84BB16AD                 
            vm_nor  :  not FFFFFFFF , not FFFFFFFF      and  0 , 0 = 0                                
            vm_nor  :  not DFB3743E , not 0      and  204C8BC1 , FFFFFFFF = 204C8BC1                  
            vm_nor  :  not 204C8BC1 , not FFFFFFFF      and  DFB3743E , 0 = 0                        
            vm_nor  :  not 0 , not 204C8BC1      and  FFFFFFFF , DFB3743E = DFB3743E                  
            vm_nor  :  not 12FF80 , not 12FF80      and  FFED007F , FFED007F = FFED007F               
            vm_nor  :  not 2D6E6E73 , not FFED007F      and  D291918C , 12FF80 = 109180               
            vm_nor  :  not 12FF80 , not D291918C      and  FFED007F , 2D6E6E73 = 2D6C0073            
            vm_nor  :  not 2D6C0073 , not 109180      and  D293FF8C , FFEF6E7F = D2836E0C            
            vm_nor  :  not 7FFD6000 , not 7FFD6000      and  80029FFF , 80029FFF = 80029FFF           
            vm_nor  :  not 43B692E4 , not 80029FFF      and  BC496D1B , 7FFD6000 = 3C496000           
            vm_nor  :  not 7FFD6000 , not BC496D1B      and  80029FFF , 43B692E4 = 292E4              
            vm_nor  :  not 292E4 , not 3C496000      and  FFFD6D1B , C3B69FFF = C3B40D1B              
            vm_nor  :  not 12FE89 , not 12FE89      and  FFED0176 , FFED0176 = FFED0176               
            vm_nor  :  not 879EC2CA , not 12FE89      and  78613D35 , FFED0176 = 78610134            
            vm_nor  :  not 78610134 , not 12C288      and  879EFECB , FFED3D77 = 878C3C43            
            vm_nor  :  not FFFFFF7A , not FFFFFD6C      and  85 , 293 = 81                           
            vm_nor  :  not 293 , not 85      and  FFFFFD6C , FFFFFF7A = FFFFFD68                     
            vm_nor  :  not FFFFFD68 , not 81      and  297 , FFFFFF7E = 216                           

在贴一段成功的 (这段经精简 )

                  
            vm_nor  :  not EDCFF8C6 , not EDCFF8C6      and  12300739 , 12300739 = 12300739        
            vm_nor  :  not 12300739 , not FFFFFF00      and  EDCFF8C6 , FF = C6                    
            vm_nor  :  not 91386124 , not FFBEF137      and  6EC79EDB , 410EC8 = 410EC8            
            vm_add  :  CAEFE74A  +  BC8BCD7F  =  877BB4C9                                          
            vm_add  :  877BB4C9  +  78844BFD  =  C6                                                
            vm_nor  :  not C6 , not C6      and  FFFFFF39 , FFFFFF39 = FFFFFF39                    
            vm_add  :  C6  +  FFFFFF39  =  FFFFFFFF                                                
            vm_nor  :  not FFFFFFFF , not FFFFFFFF      and  0 , 0 = 0                       
            vm_nor  :  not 3635EDCF , not 3635EDCF      and  C9CA1230 , C9CA1230 = C9CA1230        
            vm_nor  :  not C9CA1230 , not FFFFFF00      and  3635EDCF , FF = CF                    
            vm_nor  :  not F4020447 , not FFBF06D7      and  BFDFBB8 , 40F928 = 40F928            
            vm_add  :  FE3E80D  +  F01C1723  =  FFFFFF30                                          
            vm_nor  :  not A8DAFC20 , not FFFFFF30      and  572503DF , CF = CF                    
            vm_nor  :  not CF , not CF      and  FFFFFF30 , FFFFFF30 = FFFFFF30                    
            vm_add  :  CF  +  FFFFFF30  =  FFFFFFFF                                                
            vm_nor  :  not FFFFFFFF , not FFFFFFFF      and  0 , 0 = 0                                             
            vm_add  :  5CCAE1E7  +  A3351F11  =  F8                                                
            vm_nor  :  not E0 , not F8      and  FFFFFF1F , FFFFFF07 = FFFFFF07                    
            vm_add  :  E1BE5CD2  +  1E82CA14  =  4126E6                                            
            vm_add  :  7D5B353A  +  C8F6C1CC  =  4651F706                                          
            vm_add  :  4651F706  +  B9AE07FA  =  FFFFFF00                           
            vm_nor  :  not D6 , not D6      and  FFFFFF29 , FFFFFF29 = FFFFFF29                    
            vm_nor  :  not FFFFFF29 , not FFFFFF00      and  D6 , FF = D6                          
            vm_add  :  FEBCAAE  +  F05530C4  =  40FB72                                             
            vm_add  :  E3F6B426  +  D1856693  =  B57C1AB9                                          
            vm_add  :  B57C1AB9  +  4A83E61D  =  D6                                                
            vm_nor  :  not D6 , not D6      and  FFFFFF29 , FFFFFF29 = FFFFFF29                    
            vm_add  :  D6  +  FFFFFF29  =  FFFFFFFF                                                
            vm_nor  :  not FFFFFFFF , not FFFFFFFF      and  0 , 0 = 0                           
            vm_nor  :  not D6E436 , not D6E436      and  FF291BC9 , FF291BC9 = FF291BC9            
            vm_add  :  D6E436  +  FF291BC9  =  FFFFFFFF                                            
            vm_nor  :  not FF291BC9 , not FFFFFF00      and  D6E436 , FF = 36                     
            vm_add  :  FFFFFF00  +  D6E436  =  D6E336                                             
            vm_add  :  8CD0127F  +  7370EB6B  =  40FDEA                                            
            vm_add  :  24D0AE58  +  DB2F50BB  =  FFFFFF13                                          
            vm_nor  :  not 8E00A311 , not FFFFFF13      and  71FF5CEE , EC = EC                    
            vm_add  :  FFFFFF13  +  71FF5CEE  =  71FF5C01                                          
            vm_nor  :  not 36 , not 36      and  FFFFFFC9 , FFFFFFC9 = FFFFFFC9                    
            vm_add  :  36  +  FFFFFFC9  =  FFFFFFFF                                                
            vm_add  :  EC  +  FFFFFFC9  =  B5                                                      
            vm_nor  :  not B5 , not B5      and  FFFFFF4A , FFFFFF4A = FFFFFF4A                    
            vm_add  :  B5  +  FFFFFF4A  =  FFFFFFFF
2010-8-23 21:49
0
雪    币: 1769
活跃值: (54)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
一个程序的运行记录是一回事,然而建立了程序的流程结构就是另一回事了,我们看看程序的基本控制结构有三种:顺序结构、选择结构和循环结构。如果你跟踪一个循环,比如它循环1000次,如果把这1000次的运行情况都记录下来,那是好长,而且让人完全摸不着头脑。

但是,我如果在跟踪的时候就识别出基本的结构,尤其是循环,那么当第二次走到循环入口的时候,一个循环的结构图就建立了,后面重复的记录就不需要了,只要注意那些没走过的就可以了。

在这个过程中,可能在一个基本块中就有花指令,冗余代码变形,比如4个inc eax之类的,你在分析的时候明知这是垃圾,还要为它分心,是很消磨人的耐心的,这时候代码优化就把人从这种简单劳动中解放出来。

我更关心的是能不能建立起整个流程的基本框架,它也许有几万个分支,可是在建立了结构图后,也许只是几个循环,几个子过程来回调用几次而已,代码不过十几行。然后代码优化不是优化整个程序的循环过程,它不是对每一次走过分支进行判断,它是对程序控制流程图进行优化。一个循环也许走了几万次,但经过识别后,其实放到流程图中只是十几行,优化是对这十几行东西进行的。

至于怎样识别循环,为什么在建立流程图后能有效地进行优化,我建议大家一起来看看编译原理的书,这个在数学上是有公式,有证明的。我的数学知识很贫乏,但我看到那个什么数据流方程之后,我觉得对代码优化很有信息。

电脑是死的东西,给它一,它就计算一,根本不存在什么狡猾的东西,它再怎么自我变形,仍然要遵守基本的逻辑结构。调试它,记录下它走过的每一步,识别出循环,然后一定能建立流程图,交给gcc去优化,去除冗余,就是我们要的东西。
2010-8-24 05:10
0
游客
登录 | 注册 方可回帖
返回
//