00:00
接下来呢,我们来看这个解锁的这样的一个思路啊,解锁这个挖掉呗,该怎么练习。那么这个胶面的实现思路啊,是什么样子的,那么解锁呢,首先我要判断啊锁是否存在。如果你都不存在,你能去解锁吗?肯定不能,你得来一个H的意思,来一个lock锁,诶发现了这个锁不存在,那你肯定不能去解锁呀。哎,那如果锁存在,比如说呢啊,我就通过一个h set的指令啊,来去写一个锁,换一个锁定行啊让UID呢,设置为一,它已经有锁了,那通过这个exist。判断这个log锁是存在的,那存在的那不一定是你的锁呀。哎,那我要看看是不是自己的锁,如果是自己的锁我才能去解锁啊。好,那我们来去,嗯,怎么判断呢。我们得要去通过AZ来去判断了啊。
01:00
那么然后是lock,那比如说UID呢,我又随便写了一个UID,这两个UID一样吗?不一样。那所呢,虽然存在,但是我发现呢,不是自己的锁,那不是自己的所,也不能理解啊。所以呢,咱最终不要去看嘛呢,XZ等于一。然后呢,HH也要等于一,并且是自己锁的情况下。所存在,并且是自己锁的情况下,我才能给你解锁啊。好,那么啊,咱这的话呢,来一个比如说UID啊,就是这个锁的UID对不对啊。就是这个有所线程的这个UID。那说明这个所存在两个值都等于一了。说明这个所存在,而且就是我的。哎,那么如果这个所不存在的情况下,那我通过这个H的意思能不能判断出来呢?来一个lock,然后是UD对不对啊,我呢往上翻,我还使用这个H的意思,你发现也等于零。
02:01
那说明H我既可以有,它可以包含X的效果。如果这个锁不存在,我使用X个意思,使用H都可以判断出来。如果H给的等于一了,说明什么?说明这个所存在。并且呢,这个锁还是属于我的的啊,那就可以解锁了。所以解锁第一步呢,我们要去。判断自己的所是否存在啊。啊,咱们应该这样子的,那我们是不是还能使用H这个Z。A,这个指令。他自己的所受存在。如果不存在。不存在,那么则说明是恶意释放所,那就反馈下能返回一个NRL这样的一个标识位嘛。那将来我在代码里面N啊,就代表是nu,如果是nu的情况下,我就可以抛出异常。
03:02
那么在我们这个人生lock里面就这样子的。啊,判断当天线程是不是有所线程,如果不是的话,则抛出异常,因为我们这里判断是否自己的锁吗。这个所是成的。如果你自己的锁不存在,说明你在恶意释放锁呀。说明你想释放别人所呀。直接返回了。OK,到时候我们在代码里面也可以抛出异常啊。罚咱第一步。第二步来看啊。软件log底层是对S值进行减一。减一后呢,来看看是不是减为零了,减为零我就可以抵着把这个所给它释放掉了呀。OK,那如果没有减为零呢?我们减一就可以了啊,就不用管了。好,那我们要去第二步要对咱们这个,我要对咱们这个count值对吧,对这个值来进行简易操作啊。哎,这个组还有没有了。啊,没有了,我可以去设置一下这个数啊,来一个H。
04:02
H,然后设置为三。那我可以呢?对于这个,如果是自由所存在。那么则精减一对吧,第二步。呃。如果自己的所存在,那么所。对,则减一对吧,减一等于减一就可以了啊H这是h in可BY等于是负一,进行减一操作。然后呢,判断减一后的值是否为零。那为零。啊,V0。如果为零,那么则返回一代表解锁成功啊。那接着成功,那如果不为零,第三步那不为零,那么就返回它的返回零就可以了。
05:05
代表呢,我出来了一次。对吧,做了一次。那么之前这个底层源码里面啊,因为它有含的有这个抛出异常处false,那么在加法里面一代表是处零代表是false嘛。对,出来一次就反问比对吧,是false。好,三个标识V啊。好,那我们这套呢,如果自己的所存在啊,通过这个H这个来判断一下啊,比如说咱可以我发现是自己的所。那么数字解锁,我就可以二话不说来一个BY,等于是lock锁,然后把这个UID呢给。放进去来一个负一,我可以用减一操作了,已经减为二了啊。减为二了,我就返回零,没有减为零的才减为二就可返回一个零,再让我出来了一次。那么然后呢,我再去负一,因为已经减为一了,此时呢,这个值呀,已经变成一了啊,那变成一也是没有减为零,那我也只是反了一个零就可以了。
06:08
那么然后呢,我再减一次,已经减为零了,减为零的情况下,我可以执行DL指令了。把这个log锁呢,给它释放掉。啊,这样的,让他返回一。减为零啊,判断判断减一后的值是否为零,为零,那么则释放。释放释放所,那释放所并且呢,咱要执行这个DL指令,那就是并返回一。OK,那么是咱们这样的一个思路啊,也是借助于咱们这个思路还差不多的。好,那么这个R脚本该怎么去写来看一下写来来一个if if判断。判断,然后呢是ready点上扣。那么然后这个呢,可以来一个H。这个意思。
07:01
好,那么咱们这里呢,要看到这个lock锁以及这个UID,肯定是要的啊UID来判断自己的锁锁是否存在,如果等于零,说明是恶意释放所。那我们就可以来一个than,然后是return啊return,然后是N加L就可以了。那么use if。If,那就直接ready,点上扣,我要进行简易操作。简易操作I if直行简易操作啊,来一个increase by。然后呢,是lock锁。对,我们这个lot所用的是UAB,然后进行负一的这个操作,减一,那么减一后它执行过之后的一个返回结果集是不是零。那么如果,哎,等于。零了,那咱应该怎么样呢?说明已经减完了,减完的情况下,我们应该是可能是这个ready点上扣,那么可以执行Del指令,把这个所得释放掉了。
08:13
把这个lock锁给它释放掉就可以了啊,直接删掉了,那么此时这个D要指定返回值呢,刚好就是一咱可以第一要指定的返回值。啊,那么然是I,如果没有减为零,那I就是没有减为零,那没有减为零的也可以成一个零,代表呢,我释放了,释放了一次了。减减一过之后减一了啊,已经减完一了,释放了一次。只射还没有释放完呢。好,那么如果是NI,到时候我们就可以抛出异常,如果是一,代表释放所成功了,如果是零,代表释放了一次啊。好,这是咱们这个路啊,脚本你就已经写出来了。那么写出来之后呢,我们还是一样分析一下,我们需要什么K啊,需要什么RG,咱们需要哪些参数啊,那么K呢,咱肯定需要这个log,那最终这个lock这个位置呀,咱全部可以使用KISS1给它替换掉。
09:10
这个呢,给它替换掉。那么这个位置也要替换掉,这个也要替换掉,那么肯定还需要这个u I Du ID的话,那肯定要通过R来来传啊。那么这个UID这个位置呢,全部可以使用阿格V1给它替换掉。好,那么然后呢,就没有其他参数了。好,那么咱可以呢,把这个芦椒饼呢,拷背一下,然后给它放到一行上面去,然后在咱们的里面再去测一下啊。好,全部给它放到一行上面去。好,已经放好了,放好重的再copy一下。拷备一下,然后给它放在我们的,呃,这个里面来一个eva指令啊,让他把这个罗化脚本呢给放进去。
10:00
那我们需要几个K呢?咱需要一个K,那这个K啊是叫lock,那么UID啊,我们可以随便。呃,写一个啊,就随便写一个啊,比如说就这样一个这样的一个UID。那么我现在有锁吗?咱们来看一下啊,有锁吗?没有锁,没有锁,我现在去释放锁会怎么样呢?你反应知识应该,哎,说明是恶意释放锁啊,那么说我现在获取一个锁,找到以前那个螺瓦胶本指令,这应该是霍许锁的一个罗吊门啊。那我这里获解锁了,那么此时呢,我在这个里面应该有一个锁了哈,哎,有个有个锁了。有了锁之后呢,我来去释放锁。释放锁它那个这个UID和我加锁那个UID一样吗?不一样。虽然有锁,但是这个锁呢,不是我的锁。不是,你要释放这个锁,也是恶意释放,锁返为A。那么如果你两个UID一样了。一样的才能去释放算啊,那我可以把咱加锁的,那这个呢,给它拷贝过来,加锁呢,应该是这个UID啊。
11:08
给它拷贝过来,那么此时两个UID就一样了啊,但是虽然一样了,我这个锁呢,应该是自动释放掉了啊,看时间到了,自动释放掉了。已经没有了,那没有的情况下是也是恶意释放锁啊对啊,那么这呢,再进行那个加速的螺胶本。啊,这那个加锁R脚本,我已经加锁成功了,那我再去加锁一次,我再去加锁一次,我加锁了三次啊来此时呢,我加锁了三次,那我来去执行那个解锁R脚本啊。哎,我要解的锁呢,存在,并且就是我的锁,因为解锁一次它应该减为二了,你反应值是零啊,又减了一次呢啊,又释放一次,反应值是一,还没有减为零呢,再释放一次呢,你反应值是一。因为已经减成零了,减成零之后呢,这个锁呢,还有没有呢,就没了。就被释放掉了啊,反应这是一就释放掉了,反应这是零的。
12:01
就出来了一次。反应值是N,代表的是恶意释放所啊好,我们这个拉脚本呢,说明写的呢没啥问题。
我来说两句