我想知道我应该如何去解析COR_PRF_FUNCTION_ARGUMENT_INFO结构,提供给SetEnterLeaveFunctionHooks3WithInfo的回调方法函数。
根据我的理解,结构包含一组内存地址,其中包含函数参数值的位置。关于这个结构的信息可以在这里找到:https://learn.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/cor-prf-function-argument-info-structure
我还解析了函数的元数据,以确定提供给函数的参数数量和每个参数的类型。我使用了GetMethodPropsIMetaDataImport的功能接口。
我卡住了下一步该做什么,以及我将如何继续使用COR_PRF_FUNCTION_ARGUMENT_INFO获取每个参数的实际值结构?我是否需要确定每个参数的大小来计算每个参数的内存地址的偏移量?谢谢你的帮助
您应该能够计算出每个实参的大小以及如何根据实参的类型来解释它:
- 如果它是一个原始值类型,那么大小和表示应该是相当明显的。(int =比;'4字节整型',double =>'8字节浮点数',bool =>'4字节整数,其中0为假,其他为真',IntPtr =>pointer-sized整数) 如果它是一个引用类型,那么它将是一个指针大小的ObjectID。(警告:objectid会在回调之间发生变化,所以不要试图挂起它们,除非你也挂起GC回调并在对象移动时更新它们)。
- 如果它是一个值类型,那么你应该能够使用GetClassLayout来获取值的大小和字段的位置。
- 如果它通过引用传递,那么它将是一个(指针大小的)指针,指向存储实际值的内存位置(或者将在out参数的情况下存储)。