2017-02-13 6 views
0

コンパイラとC++とLLVMの非常に限られた知識について私は知りません。今は重要な段階に固執しています。LLVMによるオーバーフローのチェック方法IR

私の質問はです:オーバーフローがあるかどうかを確認するためにC++でllvmを使用する方法は?

これは、ソースコードです。)私は、呼び出し場所のgetInstructionsを(使用する必要があり、このチェックを行うために考える

define i32 @main(i32, i8**) #0 !dbg !6 { 
    %3 = alloca [4 x i8], align 1 
    call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !13, metadata !14), !dbg !15 
    call void @llvm.dbg.value(metadata i8** %1, i64 0, metadata !16, metadata !14), !dbg !17 
    call void @llvm.dbg.declare(metadata [4 x i8]* %3, metadata !18, metadata !14), !dbg !22 
    %4 = bitcast [4 x i8]* %3 to i8*, !dbg !22 
    call void @llvm.memset.p0i8.i64(i8* %4, i8 0, i64 4, i32 1, i1 false), !dbg !22 
    %5 = getelementptr inbounds [4 x i8], [4 x i8]* %3, i64 0, i64 2, !dbg !23 
    %6 = load i8, i8* %5, align 1, !dbg !23 
    %7 = sext i8 %6 to i32, !dbg !23 
    ret i32 %7, !dbg !24 
} 

、それはそうです:

int 
main(int argc, char **argv) { 
    char buffer[4] = { 0, 0, 0, 0 }; 
    return buffer[2]; 
} 

これはIRコードでありますその答えはload命令ですが、loadは%6にありますが、パラメータは%5ですが、わかりません:

    命令を見つける方法210
  1. は私がパラメータを比較し、それがオーバーフローだかどうかを決定するために5%にジャンプすることができますどのように、ロード命令を見つけることができたとしてもload

  2. のですか?

答えて

0
  1. 、命令がロードされている場合は、5%を取得するには LoadInst* load = dyn_cast<LoadInst>(instruction) if (load != nullptr) {...}

  2. を行うことができますチェックLoadInstにgetPointerOperand()を呼び出すには、それはこの場合には

を5%を返します。
関連する問題