.NET探查器-获取函数参数的类型
我已经实现了.Net探查器回调,它允许我获取有关在.Net应用程序中调用的所有函数的数据。函数回调非常有效。从回调开始,我给.NET探查器-获取函数参数的类型,.net,clr-profiling-api,.net,Clr Profiling Api,我已经实现了.Net探查器回调,它允许我获取有关在.Net应用程序中调用的所有函数的数据。函数回调非常有效。从回调开始,我给 GetModuleMetaData(moduleId、ofRead、IID_IMetaDataImport、(IUnknown**)和元数据导入) 我随后向其打了一个电话 metaDataImport->EnumParams(&phEnum,(mdMethodDef)metaDataToken、rParams、cMax和pcTokens) pcTokens包含一个参数引用
GetModuleMetaData(moduleId、ofRead、IID_IMetaDataImport、(IUnknown**)和元数据导入)代码>
我随后向其打了一个电话
metaDataImport->EnumParams(&phEnum,(mdMethodDef)metaDataToken、rParams、cMax和pcTokens)代码>
pcTokens包含一个参数引用标记数组。我可以使用这些令牌通过以下调用获取参数名
metaDataImport->GetParamProps(rParams[i],&(mdMethodDef)metaDataToken,&pulSequence,szName3,cchName3,&pchName3,NULL,NULL,NULL)代码>
我一直在努力寻找每个参数的类型。我找不到任何可以提供参数类型的文档
有什么想法吗?如果您想接收参数,
您可以通过签名解析来完成。每个方法都有带有所有局部变量和参数类型的签名。
通过GetSigFromToken
或GetMethodSpecProps
(对于methodSpec
),您可以接收签名
之后,您可以解析签名并提取所需的信息。
我建议您阅读ECMA-355
的I.8.6.1签名
,尤其是I.8.6.1.5方法签名
段落,以了解签名的格式
这是一个or。感谢您的回复。知道有没有更简单的方法来获取类型的字符串吗?基本上,在枚举参数时,我只是想快速检查类型是否为字符串。我很确定没有更简单的方法。不幸的是,.net profiler API中没有内置类型解析器。感谢您提供的信息!一旦您能够解析函数的参数类型,您知道如何确定它们的大小吗?我遵循了您发送的示例,在该示例中,我能够确定函数参数的类型。我有实际参数所在的内存地址,但我不知道如何遍历内存地址并获得每个参数值。元素类型字符串是否为8字节?元素类型是否为4字节?如何确定每个参数的大小?再次感谢您提供的任何信息。ELEMENT_TYPE_PTR是一种参数类型,就像ELEMENT_TYPE_I4或ELEMENT_TYPE_STRING一样,它不是参数的大小。我认为本指南可以帮助您了解更多关于签名的信息,它如何在blob、内存和压缩整数中表示,以便从签名中提取元数据。第1部分:第2部分: