2017-06-13 28 views
2

例如:如何得到全局变量的实际值LLVM

int x=0; 
int y=0; 

其中x和y是全局变量,在main()函数中,我们做到以下几点:

x++; 
y++; 

如何在llvm中获得全局变量x和y的最新值。

,当我尝试做errs()<<g;他们给出的初始值@BB0 = global i32 但我需要得到实际的价值一样x=1,使用LLVM。

+0

时,正好,你在运行LLVM吗?你为什么期望它知道运行时间值? – Oak

+0

我在MCJIT中实现代码以获取所有说明。我想在运行lli文件后通过它的名字得到全局变量的值.ll –

+0

这是可能的,以获取每个全局变量的值吗? –

回答

2

一个全球性的基本上是一个指针。您可以通过ExecutionEngine::getGlobalValueAddress获取主机程序中的地址,然后您可以取消引用该地址以获取存储值。

+0

这就是我真正需要的。谢谢 –

+0

此外,有没有一种方法来获得本地变量的实际价值。不是getValue()我想要真正的价值(如1,2,3.5等) –

+0

@ R.Omar,因为这是一个新的(虽然相关的)问题,请单独提出这个问题。 – Oak

1

假设你正在使用LLVM的API:

如果全球是恒定的,你可以直接访问它的初始值,例如:

Constant* myGlobal = new GlobalVariable(myLlvmModule, myLlvmType, true, GlobalValue::InternalLinkage, initializationValue); 
... 
Constant* constValue = myGlobal->getInitializer(); 

如果该值是如整数类型,你可以检索它像这样:

ConstantInt* constInt = cast<ConstantInt>(constValue); 
int64_t constIntValue = constInt->getSExtValue(); 

如果全球不恒定,你必须加载它指向的数据(所有的全局实际上是指针):

Value* loadedValue = new LoadInst(myGlobal);