ConstantStruct或ConstantArray读取内存内容

ConstantStruct or ConstantArray read memory content

本文关键字:内存 读取 ConstantArray ConstantStruct      更新时间:2023-10-16

我正在写一些llvm(3.7)pass,我需要一些关于Constant类的信息。在我正在解析的llvm IR中,有"ConstantStruct"或"ConstantArray"实例,它们被用作全局变量的初始化器。例如:

%struct.S = type { i32, i32, i32, i32 }
@s = global [2 x %struct.S] [%struct.S { i32 6, i32 8, i32 -8, i32 -5 }, %struct.S { i32 0, i32 2, i32 -1, i32 2 }], align 4

如果我可以读取这些常量的内存,而不必递归地遍历所有元素(也可以是ConstantStructs或数组),我的工作会容易得多。

例如,我需要一个功能

llvm::ConstantStruct* initializer = globalVar->getInitializer();
void* memoryContent;
int sizeInBytes = initializer->getMemoryContent(&memoryContent);

到目前为止,我必须一个接一个地阅读元素,这是一个痛苦(而且容易出错)的过程。

任何提示都将不胜感激。

我只是知道这是不可能的,因为初始化操作数中可能存在ConstExpr。

然而,我设法获得了一个很好的递归实现,其中对valueId进行了大的切换。