目前我正在研究一種工具,該工具可識別任意程序上的全局變量和字段變量的加載和存儲訪問。此外,訪問的變量應該由它們的源級別名稱/標識符來標識。 爲了做到這一點,我將診斷下的程序的源代碼編譯爲帶有調試信息的LLVM IR。到目前爲止,生成的元數據節點包含所需的源級別標識符。但是,我無法連接到某些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」 是「號碼」的標識符。但是,一般來說,我看不出如何找出哪些IR標識符對應於哪些元數據。
有人可以幫我嗎?