Clang 如何在llvm中获取全局变量的实际值

Clang 如何在llvm中获取全局变量的实际值,clang,llvm,llvm-clang,Clang,Llvm,Llvm Clang,例如: int x=0; int y=0; Constant* myGlobal = new GlobalVariable( myLlvmModule, myLlvmType, true, GlobalValue::InternalLinkage, initializationValue ); ... Constant* constValue = myGlobal->getInitializer(); 其中x和y是全局变量,在main()函数中,我们执行以下操作: x++; y++;

例如:

int x=0;
int y=0;
Constant* myGlobal = new GlobalVariable( myLlvmModule, myLlvmType, true, GlobalValue::InternalLinkage, initializationValue );
...
Constant* constValue = myGlobal->getInitializer();
其中x和y是全局变量,在main()函数中,我们执行以下操作:

x++;
y++;
如何在llvm中获取全局变量x和y的最新值


当我尝试执行
errs()时,全局函数基本上是一个指针。您可以通过获取主机程序中的地址,然后可以取消引用该地址以获取存储值。

假设您使用的是LLVM的API:

如果全局值为常量,则可以直接访问其初始化值,例如:

int x=0;
int y=0;
Constant* myGlobal = new GlobalVariable( myLlvmModule, myLlvmType, true, GlobalValue::InternalLinkage, initializationValue );
...
Constant* constValue = myGlobal->getInitializer();
如果该值为整型,则可以按如下方式检索:

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

确切地说,您什么时候运行LLVM?为什么您希望它知道运行时值?我在MCJIT中实现代码以获取所有指令。在运行lli file.llIs之后,我想通过名称获取全局变量的值。这是否可能,以获取每个全局变量的值?这是我真正需要的。另外,有没有一种方法可以得到局部变量的实际值。Not getValue()我想要真实值(如1、2、3.5等)@R.Omar因为这是一个新的(虽然相关)问题,请单独提问。谢谢,我发布了一个新问题[请紧急回答这个问题]