目前我正在开发一种工具,用于识别任意程序上的全局变量和字段变量的加载和存储访问.此外,访问变量应由其源级别名称/标识符标识.为了实现这一点,我将诊断程序的源代码编译成带有调试信息的LLVM IR.到目前为止,生成的元数据节点包含所需的源级别标识符.但是,我无法绘制与某些LLVM IR标识符和元数据中的信息的连接.
例如,考虑一个类的satic成员:
class TestClass { public: static int Number; };
相应的LLVM IR如下所示:
@_ZN12TestClass6NumberE = external global i32, align 4 ... !15 = !DIDerivedType(tag: DW_TAG_member, name: "Number", scope: !"_ZTS12TestClass", file: !12, line: 5, baseType: !16, flags: DIFlagPublic | DIFlagStaticMember)
在这个受控的例子中,我知道"@ _ZN12TestClass6NumberE"是"Number"的标识符.但是,总的来说,我没有看到如何找出哪个IR标识符对应于哪个元数据.
有人可以帮帮我吗?