Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET探查器-获取函数参数的类型_.net_Clr Profiling Api - Fatal编程技术网

.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包含一个参数引用

我已经实现了.Net探查器回调,它允许我获取有关在.Net应用程序中调用的所有函数的数据。函数回调非常有效。从回调开始,我给

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部分: