当我迭代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实现相同的目标。
答案 0 :(得分:0)
我不能将每个元素都视为char类型 对不起,我只是想知道我们可以加载globalvariable中的值并将其转换为char *或string
我建议您查看LLVM Language Reference Manual以及DragonBook,因为根据您的帖子历史判断,您几乎不了解编译器内部。
至于你的问题,在LLVM IR级别没有char或string类型的东西,char*
或string
类型i8 *通常在IR级别,你可以通过阅读LLVM IR了解自己。 LoadInst
,GetElementPtr
和BitCast
的某种组合可以实现您的目标。
在旁注中,如果您正在尝试编写StringEncryption传递,我认为这是根据您的帖子历史记录判断的情况,请查看my open-source implementation并希望您可以了解一下左右