解析 COR_PRF_FUNCTION_ARGUMENT_INFO 结构

Parsing the COR_PRF_FUNCTION_ARGUMENT_INFO Structure

我想知道我应该如何解析提供给 SetEnterLeaveFunctionHooks3WithInfo[=25] 的回调方法的 COR_PRF_FUNCTION_ARGUMENT_INFO 结构=]函数。

据我了解,该结构包含一组内存地址,其中包含函数参数值的位置。有关此结构的信息可在此处找到:https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/cor-prf-function-argument-info-structure

我还分析了函数的元数据以确定提供给函数的参数数量和每个参数的类型。我使用了 IMetaDataImport 接口的 GetMethodProps 函数。

我不知道下一步该怎么做,我将如何使用 COR_PRF_FUNCTION_ARGUMENT_INFO 结构继续获取每个参数的实际值?我是否需要确定每个参数的大小来计算每个参数与内存地址的偏移量? 感谢您的帮助

您应该能够计算出每个参数的大小以及如何根据参数的类型来解释它:

  • 如果它是原始值类型,那么大小和表示应该是不言而喻的。 (int => '4 byte integer', double => '8 byte floating point', bool => '4 byte integer where 0 is false and everything else true', IntPtr => 'pointer-sized integer')
  • 如果它是引用类型,那么它将是指针大小的 ObjectID。 (警告:ObjectID 会在回调之间发生变化,所以不要试图挂在它们上,除非你也挂钩 GC 回调并在对象移动时更新它们)。
  • 如果它是值类型,那么您应该能够使用 GetClassLayout 获取值的大小和其中字段的位置。
  • 如果它通过引用传递,那么它将是一个(指针大小的)指针,指向存储实际值的内存位置(或者在输出参数的情况下将存储)。