0

我已经构建了自定义 IL 重写器,可以将自定义代码注入到某些方法中。这次注入的一部分,我想实例化List<int>. 我已经找到了 List~1 的 mdTokenRef。

从这个 mdTokenRef 中,我如何定义或获取 TypeSpec?我可以为此定义 TypeSpecBlog,如下所示。但是,寻找 ICorProfiler API 来查找 TypeSpec。

COR_SIGNATURE sigListInt[] = { ELEMENT_TYPE_GENERICINST, ELEMENT_TYPE_CLASS, tdList, 0x01, ELEMENT_TYPE_I1 };
4

1 回答 1

0

您不能从 mdTokenRef 定义 TypeSpec,但您可以使用 IMetaDataEmit 对象并通过 GetTokenFromTypeSpec 函数定义您的 TypeSpec。

要获取 IMetaDataEmit 对象,您可以使用提供 QueryInterface 功能的 IMetaDataImport

IMetaDataImport* mdImport;
....
IMetaDataEmit* mdEmit;
HRESULT hr = mdImport->QueryInterface(IID_IMetaDataEmit, (void**)&mdEmit);
于 2018-01-10T10:28:43.737 回答