如何访问 .Net CLR blob 项
How to access .Net CLR blob items
我正在研究 Roslyn,到目前为止我已经了解到使用 System.Reflection.Metadata
将 C# 字符串文字放置在 CLR #US(用户字符串)堆中,特别是使用 GetOrAddUserString()
方法。然后在运行时通过 ldstr
IL 指令访问这些字符串。
我可以看到 System.Reflection.Metadata
还包含一个 GetOrAddConstantBlob()
方法,可以将数据(包括 UTF16 字符串)放在 blob 堆上。这大概是可以使用 dotPeek 看到的#Blob 元数据,如这篇博客文章的屏幕截图所示:
https://blog.maartenballiauw.be/post/2016/11/15/exploring-memory-allocation-and-strings.html
我的问题是,如何访问此 blob 数据?是否有一些 IL 指令对应于 ldstr
呢? System.Reflection.Metadata
中的某些方法?有没有关于这个的文件? (我试过谷歌搜索各种关键字,但没有任何运气。)
没有从 #Blob
流访问数据的 IL 指令。相反,blob 由元数据 table 中的字段引用。例如,MemberRef
元数据 table 的 Signature
列是 #Blob
流中成员签名的偏移量。
文件格式(包括#Blob 流、IL 指令和元数据 tables)由 ECMA-335(特别是分区 II 和 III)定义。
我正在研究 Roslyn,到目前为止我已经了解到使用 System.Reflection.Metadata
将 C# 字符串文字放置在 CLR #US(用户字符串)堆中,特别是使用 GetOrAddUserString()
方法。然后在运行时通过 ldstr
IL 指令访问这些字符串。
我可以看到 System.Reflection.Metadata
还包含一个 GetOrAddConstantBlob()
方法,可以将数据(包括 UTF16 字符串)放在 blob 堆上。这大概是可以使用 dotPeek 看到的#Blob 元数据,如这篇博客文章的屏幕截图所示:
https://blog.maartenballiauw.be/post/2016/11/15/exploring-memory-allocation-and-strings.html
我的问题是,如何访问此 blob 数据?是否有一些 IL 指令对应于 ldstr
呢? System.Reflection.Metadata
中的某些方法?有没有关于这个的文件? (我试过谷歌搜索各种关键字,但没有任何运气。)
没有从 #Blob
流访问数据的 IL 指令。相反,blob 由元数据 table 中的字段引用。例如,MemberRef
元数据 table 的 Signature
列是 #Blob
流中成员签名的偏移量。
文件格式(包括#Blob 流、IL 指令和元数据 tables)由 ECMA-335(特别是分区 II 和 III)定义。