0

我想知道我应该如何解析提供给SetEnterLeaveFunctionHooks3WithInfo函数的回调方法的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结构获取每个参数的实际值?我是否需要确定每个参数的大小来计算每个参数的内存地址的偏移量?谢谢你的帮助

4

1 回答 1

0

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

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