定义后如何获取 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 是不可能的,因为这些值尚未加载到实际内存中。
我使用 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 是不可能的,因为这些值尚未加载到实际内存中。