Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/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 #pragma alloc_文本(页面)代码未对齐页面_Memory Management_Drivers_Kernel_Wdk - Fatal编程技术网

Memory management #pragma alloc_文本(页面)代码未对齐页面

Memory management #pragma alloc_文本(页面)代码未对齐页面,memory-management,drivers,kernel,wdk,Memory Management,Drivers,Kernel,Wdk,我正面临一个(可能的)问题,即WinXP 32位的DDK(相当旧的版本:3590)。我的驱动程序包含一些未序列化的静态变量(我想它们应该分配给.bss节)和一些可分页代码节中的函数(用#pragma alloc_page(page,func)标记)。可分页代码收集在单独的对象文件中。我发现链接器似乎将静态和可分页代码分配给内核地址空间中的同一页(即变量为0xEFFCB0A0,函数为0xEFFCB600-通过windbg验证)。静态变量在中断环境中使用,因此它们的页面必须锁定在内存中。但是如果同一

我正面临一个(可能的)问题,即WinXP 32位的DDK(相当旧的版本:3590)。我的驱动程序包含一些未序列化的静态变量(我想它们应该分配给.bss节)和一些可分页代码节中的函数(用#pragma alloc_page(page,func)标记)。可分页代码收集在单独的对象文件中。我发现链接器似乎将静态和可分页代码分配给内核地址空间中的同一页(即变量为0xEFFCB0A0,函数为0xEFFCB600-通过windbg验证)。静态变量在中断环境中使用,因此它们的页面必须锁定在内存中。但是如果同一个页面包含可交换的代码,我担心这些变量会突然消失。链接器的映射正确地报告可分页代码位于不同的区段(“页面”),但是偏移(“RVA+ BASE”)位于包含静力学的页的中间。 如何强制链接器/加载程序为可分页代码分配单独的页面?是否有一些“#pragma”强制截面对齐角?我做错什么了吗

PS:驱动程序加载器当然足够聪明,可以将包含变量和代码的页面从分页池中取出,但是由于页面包含变量,因此它必须是可写的。我更希望可执行代码位于只读页面中。内核模式下错误的数组访问仍然很难调试


PPS:在我的功能前后添加了4096个“nop”。。。好的,它是有效的。。。没有更好的建议了吗?

将您的全局数据放在它们自己的数据段中:

#pragma data_seg("NONPAGE")
// declare your globals here
#pragma data_seg()
资料来源:

默认情况下,将使用读/写而不是分页标志创建分区

您可以指定其他剖面选项:

#pragma comment(linker, "/section:NONPAGE,ERW")
资料来源:

或者,您可以将链接器选项放在
源文件中:

LINKER_FLAGS = $(LINKER_FLAGS) /SECTION:NONPAGE,ERW

注意:如果您正在构建库,请使用
librariar\u标志
代替

将全局数据放在它们自己的数据段中:

#pragma data_seg("NONPAGE")
// declare your globals here
#pragma data_seg()
资料来源:

默认情况下,将使用读/写而不是分页标志创建分区

您可以指定其他剖面选项:

#pragma comment(linker, "/section:NONPAGE,ERW")
资料来源:

或者,您可以将链接器选项放在
源文件中:

LINKER_FLAGS = $(LINKER_FLAGS) /SECTION:NONPAGE,ERW

注意:如果你在建一个图书馆,用
librariar\u FLAGS
代替Whoa,这个问题肯定会在这里持续很久。您确定驱动程序可执行代码通常是只读的吗?毕竟,使代码成为只读似乎是一种相当新的“趋势”。哇,这个问题肯定在这里存在很长时间了。您确定驱动程序可执行代码通常是只读的吗?毕竟,使代码只读似乎是最近的一种“趋势”。