0

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

4

1 回答 1

1

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

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

于 2013-02-13T18:13:49.773 回答