プログラム解析:python solidityプログラムを解析し、関数ブロック分割を行う


現在、C言語、JAVA、Pythonなどのプログラム言語の分析に対する需要はますます大きくなっており、私たちはこれらの言語で問題を処理することが多いが、実際にはそれぞれの言語に自分の不足点があり、プログラム言語の不足点を分析したり、目の前にあるプログラムの脆弱性を分析したりする需要も増えている.
本問題では、python抽出ファイルで指定するコード行で述べたような分析を継続し、solidity言語における関数依存性を分析するが、存在するプログラム制御フローチャートとは全く同じではなく、callから分析する必要がある.valueから、関数の呼び出し関係を見つけます.
関数分割
solidity定義関数の特徴に基づいて,各関数を「function」で分割し,2次元配列に格納した.
#     
def split_function(filepath):  # filepath:           
    f = open(filepath, 'r')
    lines = f.readlines()
    f.close()
    flag = -1  #           

    for line in lines:
        text = line.strip()  # strip trim         。
        if len(text) > 0 and text != "
": if text.split()[0] == "function": function_list.append([text]) flag += 1 elif len(function_list) > 0 and "function" in function_list[flag][0]: function_list[flag].append(text) return function_list

次に、関数を定義してcallを見つけます.valueの位置.
#      call.value   
def find_location(filepath):
    functionList = split_function(filepath)
    S_count = 0

    for i in range(len(functionList)):
        for j in range(len(functionList[i])):
            text = functionList[i][j]
            if 'call.value' in text:
                location_i, location_j = i, j  # call.value      
                print("S_location: ", functionList[location_i][location_j])
                print("S_location_function: ", functionList[location_i])
                node_list.append("S" + str(S_count))
                S_count += 1

    print(node_list)

その後,関数の呼び出し関係を引き続き改善し,主に自動生成図(graph)の効果を達成する.