本期视频讲的是铲除植物, 就之前因为我们有一个功能,就是当我们添加一个植物以后,对吧?根据植物的数量可以去找到添加植物的口啊,因为之前已经找到了,那现在我们本期视频角的找的应该是如何去删除当前的植物? 也就是说如果说我们用铲子去铲的话,我们需要一个一个去铲,我们需要找到这个铲子的靠是在哪里, 然后根据当前的植物数量先去搜索当前的植物,应该是山,手持搜索,然后呢我们再去添加一一个植物, 现在当前的值应该是四,再次搜索四,然后我们铲除掉一个植物,当前应该是三,那也就是这一条数据,那我们右击这个数据,找出什么该写的这个地址, 然后我们再去铲铲掉一个植物,当我们铲除植物的时候,扫描器扫描到了这条汇编代码,然后我们点击显示返回编,就找到这一条,然后我们在这里下一个断点, 种植一颗植物,多种几颗,然后我们等会做铲除操作的时候 产出一颗植物。当当前游戏被暂停下来,被暂停下来以后,然后我们在这里下一个,因为下来一个断点, 我们把这个断点给取消掉,返回到他的上一层,他的上一层是运行了这个靠,对吧?那我们在这里下一个断点,点击运行, 在发现呢就是游戏没有运行起来,让我们把这个断点给取消掉,然后让游戏先跑起来,然后呢我们再来在这里下一个断点,那我们会会发现什么呢?就即使我们没有拿铲子去铲除这个植物, 依然会被暂停下来,那就说明这是一个反复的扫描,就不管我们去不去铲除它,它都会对这个所有的植物做一个便利,对吧?那也就是说,那我们回到刚才我们找到的那一个点上,首先把这个断点取消掉, 然后回到刚才找到那个点,找出什么该写的这个地址,然后我们再去阐述一下, 显示返回边,然后我们就返回到了他的内部,他的内部这里会做一个 累减少了操作,那也就是说做这个减少的操作的时候,这里应该是成功的。那这里我们可以从上往下去看,进到这个靠里面以后,他首先压在 e b x, 压在 e b p, 然后把这个 e d x 和 e i x 清空, 然后他又做了一个压战 e d i 的操作,其实这些都不重要,那重要的在我们再往下去看,很明显这里是一个循环, 那有了这个循环以后,我们就大概知道他应该是一个循环体。然后在这里又看到了一个非常明显的一个, 嗯,便宜量,也是我们之前写的便利植物的便宜量,那说明他在这里对植物进行了一个便利。首先 我们还是看一下他这里会对 eix 和 ebx 做一个操作,那 eix 和 ebx 都之前都进行了清空的操作,那所以说第一次进进入到这个,嗯,靠里面以后,那他这一句 会编代码是肯定会被执行的,因为它这里的意思是不等于在跳转,对吧?那比较 compare, 用 compare 去比较 e x 和 e b x 值,因为它的零,所以说这里它一定不会跳短, 不会跳转,它就会执行这一段代码,那这个也那当前的 e i x 应该是所有的植物,也就第一个植物的开始 的地址,然后他的偏移量是三三二,也就是一四 c, 那也是之前我们找到的关于植物每一个植物变间隔的偏移量,然后再往下 就很熟悉的代码,这里会有一个 e c x 层,那也就很,那也就是说这里 c 八就是,也就是 e c x, 就是之前我们找到的呃当前植物的所有的数量,要便利的数量,那有了这个以后,他往下接着去做一个比较,同样呢,这里 e x 和 e c x 做的对比也是 比较的,如果 e i x 大于 e c x, 它就就会进行一个跳转,我们可以看一下跳转跳到了哪里,点击前 前进,他跳到了这里,对吧?然后执行的还是清空的操作,接着往下去执行,那并没有执行到我们这个真正的做扣检操作的这个词, 那也就是说在这里他执行到了,他并没有跳转,而是就是当我们真正的去铲除一颗植物时候,他没有进行跳转,而是把 esp 的值付传送给 esp, esp 这个地址上的值传送给 esp, 然后这在这里,然后他又去复制了一个负的六五五三六,然后用六五五三六和这个做一个对比, 也是之前的谓语操作,那也就是说之前和便利的过程中是一样的,他会去根据这个嗯植物的 指针加上一四八的偏移去判断当前是否是一个植物。然后如果是的情况下,他就会跳转,看一下他的跳转跳转到了哪里,他说跳转的 到这里,那也就是说如果他是一个植物的情况下,他会去用这个 e i x, 嗯,也就是植物的指针地址加上一四一四一的偏移和 b l 做一个 比较操作,那如果说这里记忆他就相当于是等于这跳转,那也就是说如果说这里执行了这一句的话,那也就相当于 呃 e x 加一四一不等于 b l, 那我们现在要知道 b l 的值是多少,那我们在这里 下一个断点,然后我们继续铲除掉一个植物,此时游戏被断下来以后,我们看到 e b f 是零零零零零,那也就是当前的 b l 也是零, b l 是 八八位的,那也就是说他是单字结的,那我们可以看一下当前的 eix 是多少, 因为我们这里他做了一个判断,那我们只需要知道 e a x 是多少, e a x 值是幺零四,那我们把幺零四拿过来,然后再加上一个之前的刚才看到的幺幺幺四一, 添加这个地址,加上一百四十一等一,那也就是说当这个 e i x 加上一一是一的偏移等于一的时候,这个植物将会消失,那我们把这个断点取消掉, 点击运行,那这个植物就消失了。那很简单,因为之前我们已经尝试便利过植物,所以说在这里我们可以直接去写那回到一语言,那我们可以把它的偏音量给它更改一下,我们写内存 应该是整数型也可以,因为他毕竟是一就八字结和三十二字结,因为八字结是在前,就所有的, 比如说我们举个例子,这是三十二位的,对吧?三十二位的一应该是怎么排序的呢? 如果说三十二位等于一,他的排序应该是零一零零零零零零,而如果是短字节型, 也就是说是十六位的,那他也他的值表达的方式应该是零一零零, 那如果说他是字符型的,那他就是零一,那所以说在这里怎么写都是一样的,那我们在这里可以直接去写代码,写内存, 我们看一下有没有短整数型,应该是字节型, 写内存字节字节型,首先我们要 输入它的参数,首先是进程的 id, 然后应该他写的地址应该是植物的指针,加上他的偏移量,十六到十,他的偏移量是不是一是一, 然后输入的值应该是一。那我们这样写了以后,能否清除掉所有的植物呢?我们做一下尝试, 点击让游戏可以后台运行,然后我们点击一下,便利啊,植物就可以消失了,就当我们想要删除某 某一个植物的时候,我们就可以去删除他,那同样的,如果说我们想要删除某一行的,那也是可以的,我们只需要在这个他的某一行上去做一个判断就可以了,那当前就实现了删除所有植物的功能, 而且我们已经把代码写出来了,那现在的话他应该还会有其他的,就比如说他是在哪个位置,对吧?他的位置的偏音量我们是也是可以去找到的,那我无非就是做一下对比就可以找到。那当前这一句代码就是更改了, 这一句代码的含义就是 更改植物的 铲除状态,也就是说当他的偏移量是一四一等于一的时候,那表示 植物被铲除, 那我们有了这样一个,当我们找到这个偏音量,再加上他的值以后,那我们就可以实现 把植物铲除,因为他会有在另外一个县城中去反复的去判断这个字,也就是说一是一的偏音量是否等于一,如果等于一的情况下,那他这个植物就会被自动在另外一个县城里面被删除掉,那我们 就实现了这个功能,那所以说铲除他并不是一个靠,而是一个改变植物状态的一个值,那这在这里呢?那既然他能够改变状态,我们是不是就能去找这个靠了呢? 就现在即使我们已经实现了这个功能,那我们可以,如果我想只想对某一个植物或某个坐标上的植物进行铲除的话,我们应该如何去做呢?那接下来我们可以去找到一个偏移调,首先我们把这个功能给他删掉, 对吧?然后我们点击运行, 然后我们回到游戏种植一颗植物,随便种植一颗, 然后我们点击按钮去便利一下,那我们就得到了当前的地址,当前植物指针地址是这个,那我们回到游戏里面,然后呢去做搜索这个值, 这个值是一个十进制的,那我们要把它转成十六进制,这个值加上一是一的偏移, 那当前这个值等于零,那我们看一下什么改写了这个地址,那当我们去铲除这个植物的时候,那肯定有值来改写它,那我们就找到了, 那这里就是给他负值的这个地方,那我们在这里下一个断点,然后呢我们再种植一颗再去产, 此时游戏被断下来以后,然后我们去做,去看到底是哪里调用了这个地址。首先上面我们不用去看他这里做了一个判断,去判断他依然是 a b p 加二四的值,那是否等于十三,这个十三我们不知道他是什么状态,那我们接着往下去找,那我们可以看到就上面这一段代码,无论怎么去判断这个代码是始终要运行的,那也就是他始终会给他 一四一的值设置为零一,那也就是说会这个这个植物会被删除,那我们只需要把这个接着往下去找,找到他的上一层,但是我们并没有找到,没有找到的话我们再中一个,然后删除。删除的时候,然后我们怎么去找呢?我们 去找他的上一层,他上一层就在这里,那我们在这里下一个断点,那看到底是哪里给他传了这个字, 或者是说它这里有一个 e i x, 那传的 e i x 到底是什么值?我们也可以可以来看一下。首先 当我们剪剪取的时候,他也会做一个删除的操作,发现没有,就当我们去剪取阳光的时候,他也会做一个删除的操作,那我们点击运行剪取阳光也会进行删除, 再点击运行,那当我们去种植一个植物的时候,然后呢我们再去铲除, 我们看 e a x 传的是什么?是 b 九零, b 九零是,我们再去看一下 b 九零, b 九零是 e a x 加八百八十八,对吧?那我们需要找到 e a x 的值到底是什么? 我们找到 e i x 的字, e x 值和这个值有很大的差别,那它是怎么去便利到的呢? 对吧?或者是说在他之前有没有其他的操作?这里还有一个 e c x, e c x 只是三三 e f 六 f 八 i, 那我们找 找一下这个值是多少? 加上一是一是没有这个值的,那所以说这里也不是我们要找的,我们在网上去看, 他这里执行了这个靠以后,然后我们到靠里面去看一下, 到靠里面以后,我们会发现好像不是我们刚才找到的地址,对吧?那也就是说我们还需要再去找,进入到这个靠里面以后,他会做了不同的操作,那我们在这里点击运行,然 然后呢我们剪剪一个阳光,剪完阳光以后,然后我们把这个断点取消掉,然后依然还是去便利便利这个游戏,我们在这里再去便利一下这个游戏,还是一零四零,那也就是还是这个地址, 那还是这个地址的情况下,那我们应该怎样去操作呢?还是找出什么改写了这个地址, 依然是把它铲除掉,铲除以后他会给他复制一个零一的操作,对吧?那我们在这里下一个断点,然后我们再去种种植一颗植物,然后再去铲除。 那当前在这个断点断下来以后,然后我们点击,不过啊,不过是没有用的, 对吧?但是我们可以怎么去操作呢?因为这上面会有判断,我们先不管他的判断做了什么,这里是一个值,对吧?他去做判断的时候,他这一系列操作这一步一定要执行的。那我们接着往下去找, 这里会有一个返回,那我们可以在这里下一个断点,然后呢我们再去种植一颗植物,然后再去铲除, 我们再点击运行,那就到了这里,那我们点击不过看就到了这里,那也就是说这个代码执行了我们刚才铲除的操作,那我们可以在这里下 一个断点,进人器已经用完了, 我们点击把这个停掉,然后在这里下一个断点,点击运行,然后我们再来种植一颗植物,再去铲除,然后他在这里断下来了,我们看一下 e b x 等于多少? d 二五零, c d 二五零。 我们看一下那 c d 二五零是不是就是当前植物的 id, 那我们就知道了,它会把植物的, 他会把植物的一个值放到这里面来,也就是说植物的指针放到这里面来,然后进行 做这个靠的操作,那很简单,那我们只需要把植物的指针拿过来以后,然后去靠到这个地址上就可以了,那这个很简单,那我们可以再看一下他的上一层有没有做一些其他的操作, 很明显这里没有 这里的值得,大概意思应该是我会把这两个值给放进来,对吧?这两个值应该是什么?应该是坐标, 那拿到这个坐标以后呢?到这里面去找,找完以后,然后进入到这个靠里面,然后去更改刚才我们 看到那个代码,那这里还有一系列的判断,那刚刚我们既然已经找到了那个卡,然后我们 回到刚才地址上,我们点击不过,再点击不过 这里是负一,然后我们一直点击不过,或者是运行也可以, 然后再去不过,不过不过,那我们就找到了刚才下断点这个考一 bx 值,刚才已经说了,他是一个当前植物的一个指针,那他也就是说他会在植物指针上面, 他会把植物指针压占,然后用这个靠去执行,那我们现在就可以去编写这个靠,编写这个靠很简单,首先在靠里面去 去加入一段代码,我们首先要添加一个子程序,子程序里面就是应该是铲除植物,靠它里面应该传的是一个植物的指针, 应该是整出型,然后呢我们要要要去做一个操作,就是和之前的基本上差不多,我们把代码复制一下, 然后这是必要的代码,这两这这三句代码都是必要的代码。然后 e、 b、 x 的值,我们先不去管它,我们先把它要复习一个 值,也就是植物的指针, 然后我们再切换到 c、 e 里面,我们看一下 这里可以用哪个值呢?应该都可以用,那我们随便找一个值,然后我们把这个值复制一下它的地址复制一下,然后回到异语言里面测试它要靠住的地址,那这样就可以了, 那我们点击嗯这个方法,然后到这个靠里面去让他执行一下,将是铲除铲除植物,靠,然后传的应该是植物的指针, 我们点击运行, 然后回到游戏,那首先让游戏运行起来, 我们改通过这个我们之前写的代码改修改一下阳光,然后种植,然后我们点击按钮便利, 然后把这里面断点全部删除掉, 看到没有,当前就完整的实现了,让所有的植物全部消失,那我们可以再添加,然后我们再去便利,然后我们再去看一下他的数量, 在便利的过程中,他就会把所有的植物给便利出来,那同样的, 当我们去种植一颗,无论什么样的植物,我们点击便利的时候,都可以把这个植物给删除掉,那本期视频到此结束。