我创建了一个.NET评测DLL,用于实现ICorProfilerCallback3
接口。
我使用评测来跟踪运行时调用的函数,但是,我希望跟踪特定于应用程序的函数,而不是标准的.NET框架函数。
我成功地使用了SetEnterLeaveFunctionHook
方法,并为它提供了回调函数。
然后,当我在回调函数中时,我使用GetFunctionInfo
和GetModuleInfo2
函数获得函数信息和程序集信息。
我遇到的问题是,这显然是每个函数都会调用的,我正在寻找一种方法来区分.Net框架DLL和非标准DLL。
例如,当应用程序启动时,大多数调用都转到mscorlib.dll
,我对此不感兴趣。
有什么想法吗?我试过调用这个函数,但pdwImplFlags
似乎没有填充任何有用的内容。
https://learn.microsoft.com/en-us/dotnet/framework/unmanaged-api/metadata/imetadataimport-getmethodprops-method
您可以使用SetFunctionIDMapper2
指定一个映射器,该映射器检查函数是否感兴趣,如果不感兴趣,则在pbHookFunction
中返回false。然后,您应该只获得在pbHookFunction
中返回true的方法的回调。