在LLVM中查找特定变量的所有用法

在LLVM中查找特定变量的所有用法,llvm,llvm-clang,Llvm,Llvm Clang,我对LLVM很陌生 我正在尝试编写一个llvm过程来执行类似于污染分析的操作。在我的工作中,我需要迭代特定预定义变量的Def-use链。例如,一个C程序的分解程序包含以下代码 @someVar = external global %struct.something 这是在一个函数上面找到的,我想在我的函数中找到这个@someVar的所有用法。我该怎么做?我开始写函数传递。但是我如何获得这个特定标识符的Def Use链呢 我在LLVM手册中找到了这个 但我不确定在这种情况下如何使用它 如果

我对LLVM很陌生

我正在尝试编写一个llvm过程来执行类似于污染分析的操作。在我的工作中,我需要迭代特定预定义变量的Def-use链。例如,一个C程序的分解程序包含以下代码

  @someVar = external global %struct.something 
这是在一个函数上面找到的,我想在我的函数中找到这个@someVar的所有用法。我该怎么做?我开始写函数传递。但是我如何获得这个特定标识符的Def Use链呢

我在LLVM手册中找到了这个

但我不确定在这种情况下如何使用它


如果我的问题含糊不清或幼稚,对不起。我是一个新手,我不知道什么信息是相关的

我正在粘贴链接中的代码

Function *F = ...;

for (Value::use_iterator i = F->use_begin(), e = F->use_end(); i != e; ++i)
  if (Instruction *Inst = dyn_cast<Instruction>(*i)) {
    errs() << "F is used in instruction:\n";
    errs() << *Inst << "\n";
  }
函数*F=。。。;
对于(Value::use_iterator i=F->use_begin(),e=F->use_end();i!=e;++i)
if(指令*Inst=dyn_cast(*i)){

errs()我明白这一点。我的问题是,我想我该如何获取变量的值。我不清楚。@ash您给出的代码是一条指令。只需执行此值*v=*I;我是指令的位置。如果要遍历所有指令,我知道如何执行。但要获取指向特定值的指针,我不确定如何执行…在我的例子是你如何得到@someVar值的指针?是的。但是我仍然有问题。我更新了我原来的帖子!谢谢you@ash你现在面临什么问题