int x=0;
int y=0;
其中x和y是全局变量,在main()函数中,我们做到以下几点:
x++;
y++;
如何在llvm中获得全局变量x和y的最新值。
,当我尝试做errs()<<g;
他们给出的初始值@BB0 = global i32
但我需要得到实际的价值一样x=1
,使用LLVM。
int x=0;
int y=0;
其中x和y是全局变量,在main()函数中,我们做到以下几点:
x++;
y++;
如何在llvm中获得全局变量x和y的最新值。
,当我尝试做errs()<<g;
他们给出的初始值@BB0 = global i32
但我需要得到实际的价值一样x=1
,使用LLVM。
一个全球性的基本上是一个指针。您可以通过ExecutionEngine::getGlobalValueAddress
获取主机程序中的地址,然后您可以取消引用该地址以获取存储值。
这就是我真正需要的。谢谢 –
此外,有没有一种方法来获得本地变量的实际价值。不是getValue()我想要真正的价值(如1,2,3.5等) –
@ R.Omar,因为这是一个新的(虽然相关的)问题,请单独提出这个问题。 – Oak
假设你正在使用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);
时,正好,你在运行LLVM吗?你为什么期望它知道运行时间值? – Oak
我在MCJIT中实现代码以获取所有说明。我想在运行lli文件后通过它的名字得到全局变量的值.ll –
这是可能的,以获取每个全局变量的值吗? –