定义后如何获取 GetElementPtrInst 的值?

How to get a GetElementPtrInst's value after it was define?

我使用 llvm 编译了这段代码,这意味着如果我发现潜在的被零除错误,我想发送消息:

  int main() {
    int x[3];
    int y;
    x[0] = 0;
    x[1] = tainted_input();
    x[2] = 1;
    y = 4 / x[0]; 
}

编译结果为:

define dso_local i32 @main() #0 {
entry:
  %x = alloca [3 x i32], align 4
  %y = alloca i32, align 4
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %x, i64 0, i64 0
  store i32 0, i32* %arrayidx, align 4
  %call = call i32 (...) @tainted_input()
  %arrayidx1 = getelementptr inbounds [3 x i32], [3 x i32]* %x, i64 0, i64 1
  store i32 %call, i32* %arrayidx1, align 4
  %arrayidx2 = getelementptr inbounds [3 x i32], [3 x i32]* %x, i64 0, i64 2
  store i32 1, i32* %arrayidx2, align 4
  %arrayidx3 = getelementptr inbounds [3 x i32], [3 x i32]* %x, i64 0, i64 0
  %0 = load i32, i32* %arrayidx3, align 4
  %div = sdiv i32 4, %0
  store i32 %div, i32* %y, align 4
  ret i32 0
}

我发现 x[0]" 的两次出现之间存在一些差异,第一次出现:

`%arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %x, i64 0, i64 0`  

但下次有:

`%arrayidx3 = getelementptr inbounds [3 x i32], [3 x i32]* %x, i64 0, i64 0`

所以,我不知道如何获取 %arrayidx3 的值并检查 x[0] 是否等于 0。

你能帮我解决这个问题吗?

如果你不明白我想做什么,请在comment.Thanks多多说!

您正在使用 C/C++,这是一种静态编译语言。这意味着编译器无法访问大量运行时信息,其中包括 zero division 错误。因此,在编译时检查 x[0] 是否等于 0 是不可能的,因为这些值尚未加载到实际内存中。