Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory management DLL';只有部分装载_Memory Management_Dll_Citrix - Fatal编程技术网

Memory management DLL';只有部分装载

Memory management DLL';只有部分装载,memory-management,dll,citrix,Memory Management,Dll,Citrix,我的应用程序包含一些关于DLL的特定逻辑(这里解释起来有点太复杂)。 但在这种逻辑中,我注意到(在客户的Citrix终端服务器上): 在NTDLL.DLL上调用GetModuleInformation时,返回的MODULEINFO返回第一个地址(lpBaseOfDll)0x7D60000和大小0xf0000(因此其最后一个字节应为0x7D6EFFF) 但是,在一个崩溃转储文件中,我在WinDbg中看到了以下内容(使用!地址): *7D600007D601000 1000图像“J:\WINDOWS

我的应用程序包含一些关于DLL的特定逻辑(这里解释起来有点太复杂)。 但在这种逻辑中,我注意到(在客户的Citrix终端服务器上):

在NTDLL.DLL上调用GetModuleInformation时,返回的MODULEINFO返回第一个地址(lpBaseOfDll)0x7D60000和大小0xf0000(因此其最后一个字节应为0x7D6EFFF)

但是,在一个崩溃转储文件中,我在WinDbg中看到了以下内容(使用!地址):

*7D600007D601000 1000图像“J:\WINDOWS\system32\ntdll.dll”
*7D61000 7d65f000 4f000
*7d65f000 7d660000 1000
*7D6600 7d699000 39000
*7d6a0000 7d6a6000 6000
*7d6b0000 7d6df000 2f000
*7d6e0000 7d6e4000 4000
*7d800000 7d801000 1000映像“J:\WINDOWS\SysWOW64\gdi32.dll”
*7d810000 7d855000 45000
*7d860000 7d861000 1000
*7d861000 7d862000 1000
*7d870000 7d871000 1000
*7d880000 7d882000 2000
因此,看起来NTDLL.DLL的大小只有0x1000,而不是0xf0000

这解释了为什么超过0x1000大小的VirtualLock调用失败(错误代码998:对内存位置的访问无效),并且访问内存会使应用程序崩溃

在哪里可以找到DLL仅部分加载的解释?Citrix是否用存根替换DLL,但没有通过GetModuleInformation正确报告此情况?还是发生了什么事

为什么NTDLL.DLL是从J:\WINDOWS\SYSTEM32加载的,而其他大多数DLL是从J:\WINDOWS\SYSWOW64加载的?(这可能表明确实使用了一些32/64存根)


这是我第一次遇到这个问题。

Citrix没有删除DLL,但它确实对各种DLL进行了大量的挂接。这将是我对你看到的问题的最佳猜测。以下文章介绍挂钩以及如何禁用挂钩:

尝试禁用应用程序的挂钩,看看这些问题是否消失

* 7d600000 7d601000     1000   Image "J:\WINDOWS\system32\ntdll.dll"
* 7d610000 7d65f000    4f000   <unclassified> 
* 7d65f000 7d660000     1000   <unclassified> 
* 7d660000 7d699000    39000   <unclassified> 
* 7d6a0000 7d6a6000     6000   <unclassified> 
* 7d6b0000 7d6df000    2f000   <unclassified> 
* 7d6e0000 7d6e4000     4000   <unclassified> 
* 7d800000 7d801000     1000   Image "J:\WINDOWS\SysWOW64\gdi32.dll"
* 7d810000 7d855000    45000   <unclassified> 
* 7d860000 7d861000     1000   <unclassified> 
* 7d861000 7d862000     1000   <unclassified> 
* 7d870000 7d871000     1000   <unclassified> 
* 7d880000 7d882000     2000   <unclassified>