【问题标题】:Determine which .NET assembly calling unmanaged code确定哪个 .NET 程序集调用非托管代码
【发布时间】:2013-02-13 17:56:01
【问题描述】:

我有 .NET 程序集,它从用 C 编写的非托管 DLL 调用函数(不支持 CLR)。非托管 DLL 有什么方法可以确定哪个程序集调用它们的代码?我正在寻找在非托管 DLL 中不启用 CLR 支持的方法。

【问题讨论】:

    标签: .net clr unmanaged managed


    【解决方案1】:

    不,您不能在本机代码中安全地执行堆栈遍历。这仅在托管代码中才有可能,它提供堆栈框架布局保证。垃圾收集器和 CAS 检查需要。 C 编译器具有消除此类保证的优化器。他们可以,因为该语言不支持也不需要 stackwalks。

    即使您对优化器进行了微调,您仍然会遇到重大障碍,即遍历 pinvoke 编组器的堆栈帧并将即时生成的机器代码的猜测地址映射到程序集。只有 CLR 知道如何做到这一点。你无法完成这项工作。

    【讨论】:

    • 谢谢...非常冒犯。
    猜你喜欢
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2013-08-24
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多