为什么从本地文件夹加载Ntdll会产生异常?

时间:2010-07-07 12:22:47

标签: virtualization dllimport dll portable-executable

我的exe依赖于ntdll,user32和kernel32。我将这些dll保存为本地副本,并将第一个字母更改为“V”。 然后我将exe的Import dll名称编辑为kernel32的Vernel32.dll。通过在本地空间加载vernel32.dll,该应用程序正常工作。 接下来我将exe的import dll规范编辑为vtdll作为ntdll,进程从本地加载vtdll,运行其代码并在vtdll指令上抛出_stackhash异常。

我需要这个来开发我的应用程序来捆绑所有Windows依赖项。有没有人知道,为什么ntdll不能在当地空间运行。

4 个答案:

答案 0 :(得分:2)

我发现将“捆绑”系统DLL的想法不是一个好主意。

首先,将此DLL与您的应用程序一起重新分发是违法的。你应该明白DLL可以创建一些全局对象,并且使用同一个DLL的两个副本(vtdll.dll和ntdll.dll)是行不通的。你没有写过如何修改dll的导入。如果你在磁盘上执行它是非法的,而且它会破坏文件的签名(打开任何dll的文件属性并查看“数字签名”选项卡)。

如果你想尝试系统dll的不同副本,你可以通过创建名为myapp.exe.local的文件来更好地使用DLL重定向(参见http://msdn.microsoft.com/en-us/library/ms682600.aspx),其中myapp.exe是你的名字应用。可能需要从HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs中删除一些条目才能执行此操作。您应该明白,在此之后您的计算机将运行缓慢,我建议您在虚拟机中更好地进行此类实验,如果不再启动它,您可以轻松恢复。

答案 1 :(得分:2)

没有!您无法尝试替换ntdll。它由内核映射到每个进程,可能在您的任何代码被加载之前。它与内核有着复杂的联系。它知道所有正确的系统呼叫号码。尝试使用NT 5.1中的ntdll,它将在NT 6.1上崩溃。 ntdll承载系统调用入口和退出代码。内核用户回调调度程序代码。内核知道地址的线程启动函数。用户异常调度程序。用户APC处理程序。我可以继续,但我不会。

我不明白你为什么试图将这些DLL与你的程序捆绑在一起。 Windows安装无法使用这些DLL。这是ntdll.dll的零机会,因为我没有看到如果没有会话管理器和CSR,你将首先运行你的程序。

答案 2 :(得分:0)

感谢您提供的信息。它帮助我对它进行了研究。

我没有为我自己的应用程序捆绑dll。我正在为现有的应用程序提供Windows跨平台独立解决方案。

我尝试了所有应用程序发布的dll重定向技术。 它适用于除NTdll和User32.dll之外的所有dll

<强>的User32.dll:  它仅从本地空间加载user32.dll而不是内核空间。我确认了。但在执行其指令时,会导致出现具有故障模块名称StackHash_5964的空地址访问异常(c0000005)

<强> NTDLL: 启动时的应用程序,它从system32加载ntdll并再次从本地空间加载ntdll,这可能会导致错误,如你所说(全局对象共享违规) 这仅适用于ntdll,而不适用于user32.dll。

我们有没有办法一次加载ntdll(只能形成本地空间)并避免本地空间中user32.dll导致的错误。

答案 3 :(得分:0)

我尝试了您发送的参考资料,结果如下。

<强>的User32.dll

我无法构建具有以下这些功能的user32.dll。 IsThreadDesktopComposited = user33.IsThreadDesktopComposited, User32InitializeImmEntry = user33.User32InitializeImmEntry 它产生链接器错误(未解析的外部符号“IsThreadDesktopComposited”)

因此我在user32.dll中的800个函数中留下了100个这样的函数。最终构建了DLL。 然后我将dll与user33.dll一起放在本地空间中。在运行应用程序时,它表示找不到100个错过的函数过程入口点。

<强>的Ntdll.dll

我尝试删除已知的dll。但它不适合修改或删除操作。我可以读一读。我是管理员,并以管理员身份运行regedit。

是否可以为ntdll或user32.dll执行此类实现。 我猜,我会一次又一次地来。 感谢你的帮助。 但是,如果您有任何其他方式或任何建议,那将是非常感激的