Page 113 - 《软件学报》2025年第9期
P. 113

4024                                                       软件学报  2025  年第  36  卷第  9  期



                 用   δ 表示  δ = field_offset(id,φ) = sizeof (τ 1 )+...+ sizeo f (τ k−1 ). E-4  为反向使用, 因为结构体成员变量的位置具有唯
                 一性, 由首地址与偏移量决定, 所以可进行逆向推理.
                    (1)  α ⊢ le∼ e la∧α ⊢ id s ∼ e id m                                          归纳假设
                    (2)  α ⊢ µ ∼ s                                                               已知条件
                                   l
                    (3)   p,g,l ⊢ le.id s ,µ ⇒ addr +i s                                       定义2, 假设
                                   l
                    (4)  ⇒ p,g,l ⊢ le,µ ⇒ addr ∧i s = δ                                            E-4, (3)

                                      l
                    (5)   (la.id m ,σ, s,|σ|+1) ⇒ (bl,i m )                                          假设
                                     l

                    (6)   ⇒ (la,σ, s,|σ|+1) ⇒ (bl, j m )∧(i m = j m +δ)                             L4, (5)

                    (7)  ⇒ α ⊢ load(S,addr, sizeof (τ s )) ∼ ptr(bl, j m )                定义2, 4, (1, 2, 4, 6)

                    (8)  ⇒ α ⊢ load(S,addr +δ, sizeo f (τ s )) ∼ ptr(bl, j m +δ)             引理1, (4, 6, 7)

                    (9)  ⇒ α ⊢ load(S,i s , sizeo f (τ s )) ∼ ptr(bl,i m )                            (8)
                    (10)  ⇔ α ⊢ le.id s ∼ l la.id m                                              定义2, (9)
                    (11)  ⇒ α ⊢ le.id s ∼ e la.id m                                             定义4, (10)

                    5) 对于类型为     τ  的一维数组元素, Solidity    中表示为    le[e], 其中   le  为   id, MSVL  中表示为   id m [ra], 其中
                                                 ,
                                    ,
                 id m [ra] = TranExp(le[e]) ra = TranExp(e) id m  和  le 均为左值表达式,   id m [ra]、le[e]、e 和  ra 均为右值表达式. E-
                 2  与  E-6  为反向使用, 因为数组元素的位置具有唯一性, 由首地址与偏移量决定, 所以可进行逆向推理.
                    (1)  α ⊢ le[e]∼ l id m [ra]∧α ⊢ e∼ e ra                                      归纳假设
                    (2)  α ⊢ µ ∼ s                                                               已知条件
                    (3)   p,g,l ⊢ le[e],µ ⇒ v s                                                定义3, 假设
                                      l
                    (4)  ⇒ p,g,l ⊢ le[e],µ ⇒ addr +i s ∧v s = load(S,addr +i s , sizeo f (τ s ))   E-2, E-6, (3)

                    (5)  (id m [ra],σ, s,|σ|+1) ⇓ v m                                                假设
                                      l
                    (6)  ⇒ (id m ,σ, s,|σ|+1) ⇒ (bl,i m )∧v m = ptr(bl,i m )                    L2, R5, (5)

                                         ,

                    (7)  ⇒ α ⊢ load(S,addr +i s sizeo f (τ s )) ∼ ptr(bl,i m )             定义2, (1, 2, 4, 6)
                    (8)  ⇔ α ⊢ v s ∼ v m                                                     定义1, (4, 6, 7)

                    (9)  ⇒ α ⊢ le[e]∼ r id m [ra]                                                定义3, (8)
                    (10)  ⇔ α ⊢ le[e]∼ e id m [ra]                                               定义4, (9)
                    二维数组同理可证.
                    6) 对于结构体成员变量, Solidity      中表示为    le.id s , MSVL  中表示为  la.id m , 且  la.id m = TranExp(le.id s ) la =
                                                                                                    ,
                          ,
                 TranExp(le) le 和  la 为左值表达式,   le.id s 、la.id m 、id m  和  id s  均为右值表达式. E-4  与  E-8  为反向使用, 因为结构体
                 成员变量的位置具有唯一性, 由首地址与偏移量决定, 所以可进行逆向推理.
                    (1)  α ⊢ le.id s ∼ l la.id m ∧α ⊢ id s ∼ e id m                              归纳假设
                    (2)  α ⊢ µ ∼ s                                                               已知条件
                    (3)   p,g,l ⊢ le.id s ,µ ⇒ v s                                             定义3, 假设
                                    l
                    (4)  ⇒ (p,g,l ⊢ le,µ ⇒ addr +i s )∧(v s = load(S,addr +i s , sizeo f (τ s )))   E-4, E-8, (3)
                    (5)   (la.id m ,σ, s,|σ|+1) ⇓ v m                                                假设
                                     l
                    (6)  ⇒ (la,σ, s,|σ|+1) ⇒ (bl,i m )∧v m = ptr(bl,i m )                       L4, R7, (5)

                    (7)  ⇒ α ⊢ load(S,addr +i s , sizeo f (τ s )) ∼ ptr(bl,i m )           定义2, (1, 2, 4, 6)

                    (8)  ⇔ α ⊢ v s ∼ v m                                                     定义1, (4, 6, 7)

                    (9)  ⇒ α ⊢ le.id s ∼ r la.id m                                          定义3, 假设, (8)

                    (10)  ⇒ α ⊢ le.id s ∼ e la.id m                                              定义4, (9)
                    7) 对于  Solidity  中除自增自减表达式外的其他单目运算          unope, MSVL  中有  mop 1 ra = TranExp(unope), 其中
   108   109   110   111   112   113   114   115   116   117   118