小编dud*_*ud3的帖子

分析动态pinvoke

我正在使用MSIL分析器,遇到接口问题ManagedToUnmanagedTransitionUnmanagedToManagedTransition回调ICorProfilerCallback.

我想要检索的是有关被调用方法的信息(它所在的名称和模块名称).

到目前为止它工作正常.直到所谓的动态pinvoke发生(详见:http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_ .aspx)

在这种情况下IMetaDataImport::GetPinvokeMap失败.还IMetaDataAssemblyImport::GetAssemblyProps返回"dynamic_pinvoke"作为程序集的名称.

profiler_1_0->GetTokenAndMetaDataFromFunction(function_id, IID_IMetaDataImport, (IUnknown**) &imd_import, &md_token);
imd_import->GetPinvokeMap(md_token, &mapping, module_name, buffer_size, &chars_read, &md_module_ref);
// here the fail occurs

profiler_1_0->GetTokenAndMetaDataFromFunction(function_id, IID_IMetaDataAssemblyImport, (IUnknown**) &imd_assembly_import, &md_token);
imd_assembly_import->GetAssemblyFromScope(&md_assembly);
imd_assembly_import->GetAssemblyProps(md_assembly, 0, 0, 0, assembly_name, buffer_size, &chars_read, 0, 0);
// assembly_name is set to "dynamic_pinvoke"
Run Code Online (Sandbox Code Playgroud)

如何通过动态pinvoke获取模块名称(.dll)和函数名称?

c++ pinvoke cil clr-profiling-api

62
推荐指数
1
解决办法
1855
查看次数

标签 统计

c++ ×1

cil ×1

clr-profiling-api ×1

pinvoke ×1