Page 455 - 《软件学报》2026年第3期
P. 455

1418                                                       软件学报  2026  年第  37  卷第  3  期


                 转边, 以构建控制流图. 然而, 仍然可能存在孤立的子图. 为保证行为序列的完整性, 如图                       3  所示在孤立的子图上添
                 加连接边得到一个连通图. 第         3  阶段, 通过使用深度优先遍历算法来遍历构建的连通图, 得到智能合约操作码的行
                 为序列. 通过建立控制流关系和操作码之间的顺序依赖关系, 算法                    1  确保了提取的行为序列的完整性.

                 算法  1. 智能合约行为序列算法.
                 输入: 操作码序列     opcodes;
                 输出: 行为序列    behavior_seq.
                 1. BEGIN
                 2. 控制流相关的操作码集合        Control, 基本块集合  basicblocks={}, 图  G<Block, E>
                 3. FOR opcode in opcodes DO //遍历操作码序列
                 4.  IF opcode 是  Control 中的一种 THEN //比较得到最大的损失
                 5.    以  opcode 为基本块的最后一条指令, 得到一个基本块             block
                 6.    将  block  保存到基本块集合    basicblocks 中
                 7.  END IF
                 8. END FOR
                 9. FOR block in basicblocks DO //遍历基本块集合
                 10.  IF 当前基本块的最后一条指令是         JUMP  或  JUMPI THEN
                 11.    根据该基本块的跳转地址, 找到其跳转的基本块                block'
                 12.    添加   block  与  block'之间的跳转边
                 13.  END IF
                 14. END FOR
                 15. 此时得到初始图     G'
                 16. IF G'中存在孤立基本块或孤立子图 THEN //与当前点的损失进行比较
                 17.   寻找以当前孤立基本块或孤立子图的起始指令–1                为结尾地址的上一基本块
                 18.   添加当前基本块与上一基本块之间的连接边
                 19.   得到完整的连通图       G
                 20. END IF
                 21. 深度优先遍历图     G, 得到行为序列    behavior_seq
                 22. END


                                            Subgraph 1               Subgraph 2


                                            Basicblock 1             Basicblock 3

                                                         Sequential
                                            Jumping edge             Jumping edge
                                                       dependency edge

                                             Basicblock 2            Basicblock 4




                                                      图 3 连通图示意
   450   451   452   453   454   455   456   457   458   459   460