如何在非托管c ++ dll中查找调用方程序集名称

时间:2011-03-28 13:16:52

标签: c# .net c++ unmanaged stack-trace

我有非托管c ++ dll 。我从c#(.net 3.5)

调用这个非托管dll的外部方法

我正在寻找一种方法来找到女巫c#assembly正在调用我的非托管c ++ dll (进入我的c ++ dll)(至少是汇编名称)

当然,我不想将任何其他参数传递给方法

提前致谢

3 个答案:

答案 0 :(得分:1)

这需要堆栈步行。在托管代码中运行良好,这就是代码访问安全性的实现方式。当有本机堆栈帧要走时,是否工作得那么好。您可以在本机代码中尝试StackWalk64()。昂贵且不太可能运行良好,特别是在.NET 4.0中,CLR不再伪造模块。 非常警惕帧指针省略优化选项。

不要这样做,我会说。只需让托管代码传递一个额外的参数就可以轻松解决。

答案 1 :(得分:1)

最后我找到了解决方案。

我一直在寻找限制不允许访问我的非托管dll的方法。所以我抓住了我的调用者程序集位置的堆栈跟踪。

最后,我决定检查调用者程序集的公钥令牌(以这种方式找到)并验证它。

感谢您的时间和答案...

答案 2 :(得分:0)

你无法知道。任何与C兼容的语言都可以调用您的外部方法,因此Windows和CRT不会再存储有关CLR语言的内容。