如何在非托管c ++ dll中查找调用方程序集名称
我有一个非托管的c ++ DLL 。 我从c#(.net 3.5)调用这个非托管dll的外部方法
我正在寻找一种方法来找到女巫c#assembly正在调用我的非托管c ++ dll (进入我的c ++ dll)(至少,汇编名称)
当然, 我不想将任何其他参数传递给方法 。
提前致谢
这需要堆栈步行。 在托管代码中运行良好,这就是代码访问安全性的实现方式。 当有本地堆栈帧要走时,效果不好。 您可以在本机代码中尝试StackWalk64()。 昂贵且不太可能很好,特别是在.NET 4.0中,CLR不再伪造模块。 要非常警惕框架指针省略优化选项。
我会说,不要这样做。 简单地通过让托管代码传递额外的参数来解决它要容易得多。
最后我找到了解决方案。
我一直在寻找一种限制不允许访问我的非托管DLL的方法。 所以我抓住了我的调用者程序集位置的堆栈跟踪。
最后,我决定检查调用者程序集的公钥令牌(以这种方式找到)并validation它。
谢谢你的时间和答案……
你无法知道。 任何与C兼容的语言都可以调用您的外部方法,因此Windows和CRT不会对CLR语言进行额外的存储。