阿里云虚假分支剖析

34 阅读2分钟

阿里虚假分支剖析

记得加入我们的学习群:

961566389

获取最新资讯


1.a^2 + b^2 >= ab 形式

……
case 18432:
          P = (fe = (Y = (Oo = 23) * Oo) + (P = (qe = 12 >> qe) * qe)) >= (Y = Oo * qe), L = w[m = L], j.push(L), li = 25664;
          break;
        case 25664:
          w = G[I](35633, 36337), L = w[D], j.push(L), w = G[I](35633, 36337), L = w[N], j.push(L), w = G[I](35633, 36337), L = w[m], li = P ? 23107 : 13156;
          break;
……

如上代码的P表达式:

fe = (Y = (Oo = 23) * Oo) + (P = (qe = 12 >> qe) * qe) >= (Y = Oo * qe)

这个表达式简化:

((Oo = 23) * Oo)  + (qe = 12 >> qe) * qe) >= Oo * qe

再简化:

Oo  * Oo + qe * qe >= Oo * qe

啊哈!!

这不就是基本的不等式嘛

a^2 + b^2 >= 2ab > ab 所以恒为真!!!


2.a^2 + b^2 >= 2ab 形式

P = (Oo = 30 <= Oo) * Oo, P += A = (qe = qe <= 28) * qe, fe = (bo = 1 != bo) * bo, A = (Y = 2) * Y;

化简:

P = Oo * Oo + qe * qe, fe = bo * bo, A = Y * Y;
(A = P * (fe += A)) >= (Y = (bo = (fe = Oo * bo) + (P = qe * Y)) * bo)

化简:

(Oo * Oo + qe * qe) * (bo * bo + Y * Y) 
>= 
(Oo * bo + qe * Y)^2

这不就是(a^2 + b^2)*(c^2+d^2) >= (ac+bd)^2

化简就是(ad)^2+(bc)^2 >= 2adbc

也就是符合x^2 + y^2 >= 2xy


3.正数和0大于等于0


((P = 3 >> P) * P) > (P = (qe = 124 | (Y = !ie)) << 25)

左边是P^2恒大于等于0,右边是0

124|0=124

124|1=125 无论是124还是125左移25位必定为零

3. 离散之美 (x+y)^2 >=3xy (x,y属于{0,1})


4. 离散之美 (x+y)*x <=3xy (x,y属于{0,1})


(A = (bo = (Oo = Oo <= 8) + (Y = so !== pe)) * bo) >= (qe = 3 * (fe = Oo * Y))

5. 离散之美 (x+y)*x <=3xy (x,y属于{0,1})


6. 位运算 y^2 >= ((x&=31)<<31)


x&=31一定是小于等于31的数,那么(x&=31)<<31一定等于0

(Oo |= 26) * Oo) > (Y = (Oo = 1 | (A &= 31)) << 31)

7.(R = 0 | (k = R)) < 0 、 (m = 0 | (x = m)) < 16384


等等……,了解下,即可,最好用的还是,去浏览器dump每个casenum下的真假,一直为真就是真,一直为假就是假。

记得加入我们的学习群:

961566389

获取最新资讯