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