0

我已经实现了 .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

有什么想法吗?

4

1 回答 1

1

如果要接收参数的CorElementType,可以通过签名解析来实现。每个方法都有所有本地变量和参数类型的签名。通过GetSigFromTokenGetMethodSpecProps(for methodSpec) 您可以收到签名。

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

这是David Broman的 c#或c++ 解析器中的类型解析器示例

于 2021-02-28T18:01:37.853 回答