如何分析纯 dll?
Posted
技术标签:
【中文标题】如何分析纯 dll?【英文标题】:How can I profile pure dll? 【发布时间】:2011-01-26 20:58:41 【问题描述】:我有创建 dll 的项目。这些 dll 稍后由特殊插件系统 blue-sky 从 python 调用。所以在这个项目中构建可执行文件非常困难,但我需要分析。有没有可以使用纯 dll 的分析器?
我尝试过 Intel Amplifier、Microsoft VS2008 profiler,但它们不起作用。我也试过 Very Sleepy,但它的功能有限。
【问题讨论】:
【参考方案1】:如果您的 dll 是由 Python 加载的,那么您需要分析 Python 进程。使用 Microsoft 分析器,只要存在所有 .pdb 文件,它就应该解析 dll 中的符号。另一种选择是创建一个可执行文件来加载和调用您感兴趣的函数,然后分析所述可执行文件。
例如您可能有一个“python.exe”进程正在运行正在加载 .dll 的 python 程序,您可以通过以下方式将 Visual Studio 命令行分析器附加到它:
vsperfcmd /attach:"python.exe"
【讨论】:
【参考方案2】:您无法分析未运行的代码——这就是分析的定义。您将需要构建可以运行的东西(可执行文件)链接到 DLL 并使用它。
【讨论】:
实际上来自这些 dll 的代码正在运行,因此有可能进行分析,不是吗?构建链接到 DLL 的东西非常困难,因为我必须将所有插件加载器系统从 python 重写为 C/C++。 其实并不难。操作系统控制 DLL 加载。当 Windows 加载你的 DLL 时,它会检查依赖项并加载它们。只需将要加载的 DLL 传递给链接器。您甚至不需要从该 DLL 调用函数; Windows 仍将调用其DllMain()
。
没那么简单。 DLL 应按特定顺序加载,因为它们将其类型导出到该系统。我不想详细说明,但这确实不简单。有兴趣可以查看:sourceforge.net/projects/blue-sky以上是关于如何分析纯 dll?的主要内容,如果未能解决你的问题,请参考以下文章
Unity学习笔记--如何在Unity中把自己的代码打包成dll给别人使用?(纯保姆式教学,看完还不会,今晚八点,来沙城砍我)
如何配置 VS 2010 以制作利用其他 DLL 的 DLL