首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#杂注alloc_text(页面)代码未与页面对齐

问#杂注alloc_text(页面)代码未与页面对齐
EN

Stack Overflow用户
提问于 2010-11-26 02:08:59
回答 1查看 1.5K关注 0票数 1

我在WinXP 32位的DDK (一个相当老的版本: 3590)上遇到(可能)问题。我的驱动程序包含一些未初始化的静态变量(我想,它们应该被赋值给.bss部分)和一个可分页的代码部分中的一些函数(用#alloc_page(页面,函数)标记)。可分页的代码收集在一个单独的目标文件中。我发现链接器似乎将静态代码和可分页代码分配给内核地址空间中的同一页(即变量位于0xEFFCB0A0,函数位于0xEFFCB600 -使用windbg验证)。静态变量在中断环境中使用,因此它们的页面必须锁定在内存中。但是,如果同一页面包含可切换的代码,我担心变量可能会突然消失。链接器的映射正确地报告可分页代码在不同的部分(“页面”)中,但偏移量("Rva+Base")在包含静态信息的页面的中间。

如何强制链接器/加载器将单独的页分配给可分页的代码?是否有一些“#杂注”来强制段对齐属性?我做错了什么吗?

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

PPS:在我的函数前后增加了4096个“nop”...好吧,它起作用了..。没有更好的建议了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-16 15:42:51

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

代码语言:javascript
复制
#pragma data_seg("NONPAGE")
// declare your globals here
#pragma data_seg()

来源:MSDN link on data_seg

默认情况下,您创建的分区将带有读/写标志,而不是分页标志。

您可以指定其他部分选项:

代码语言:javascript
复制
#pragma comment(linker, "/section:NONPAGE,ERW")

来源:MSDN link on /SECTION

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

代码语言:javascript
复制
LINKER_FLAGS = $(LINKER_FLAGS) /SECTION:NONPAGE,ERW

注意:如果要构建库,请改用LIBRARIAN_FLAGS

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4279824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档