在llvm中加载globalvariable原始数据值

时间:2018-04-14 02:10:43

标签: llvm llvm-ir llvm-c++-api

当我迭代GlobalVariable并使用:

pool.starmap

将它们放入char数组中,我可以像修改char数组对象那样修改数据。

但是,当我使用Constant *initializer = gv->getInitializer(); ConstantDataSequential *cdata = dyn_cast<ConstantDataSequential>(initializer); const char *array=cdata->getRawDataValues().data() LoadInst来获取元素时,我无法将每个元素视为GetElementPtrInst类型。问题是如何使用llvm API实现相同的目标。

1 个答案:

答案 0 :(得分:0)

  

我不能将每个元素都视为char类型   对不起,我只是想知道我们可以加载globalvariable中的值并将其转换为char *或string

我建议您查看LLVM Language Reference Manual以及DragonBook,因为根据您的帖子历史判断,您几乎不了解编译器内部。

至于你的问题,在LLVM IR级别没有char或string类型的东西,char*string类型i8 *通常在IR级别,你可以通过阅读LLVM IR了解自己。 LoadInstGetElementPtrBitCast的某种组合可以实现您的目标。

在旁注中,如果您正在尝试编写StringEncryption传递,我认为这是根据您的帖子历史记录判断的情况,请查看my open-source implementation并希望您可以了解一下左右