.NET Profiler - 获取函数参数的类型

.NET Profiler - Getting The Type Of A Function Parameter

我已经实现了 .Net Profiler 回调,它允许我获取有关在 .NET 应用程序中调用的所有函数的数据。函数回调效果很好。从回调开始,我调用

GetModuleMetaData(moduleId, ofRead, IID_IMetaDataImport, (IUnknown**)&metaDataImport);

我随后调用

metaDataImport->EnumParams(&phEnum, (mdMethodDef)metaDataToken, rParams, cMax, &pcTokens);

pcTokens 包含一组参数引用标记。我可以使用这些标记通过以下调用获取参数名称。

metaDataImport->GetParamProps(rParams[i], &(mdMethodDef)metaDataToken, &pulSequence, szName3, cchName3, &pchName3, NULL, NULL, NULL, NULL);

我一直在尝试查找每个参数的类型。我找不到任何可以给我参数类型的文档。 https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/metadata/imetadataimport-interface

有什么想法吗?

如果要接收CorElementType的参数, 你可以通过签名解析来做到这一点。每个方法都有带有所有局部变量和参数类型的签名。 通过GetSigFromTokenGetMethodSpecProps(对于methodSpec)您可以收到签名。

之后您可以解析签名并提取所需的信息。 我建议您阅读 ECMA-355I.8.6.1 Signatures,尤其是 I.8.6.1.5 Method signatures 段落,以了解签名的格式。

这是一个example of type parser in c# or c++ parser by David Broman