繁体   English   中英

x86程序集正确使用数据段?

[英]x86 assembly proper data segment usage?

我一直在开发32位OS,并且刚刚实现了ELF加载程序。 我可以加载可执行文件,但是我希望运行的程序每个都有自己的数据段。 现在,从我在32位保护模式下的研究中得出的数据来看,数据段是指64k块,对吗? 因此,可以说我将DS设置为16,并具有mov dword eax,[test]之类的代码。 处理器得到什么样的测试(DS * 0xFFFF)+测试正确? 因此,如果test为0,那么它将读取的实际地址为983025或0xEFFF1? 这是对的还是我完全不喜欢

现在,您正在开发自己的OS,数据段,代码段和堆栈段几乎可以满足您的需求。

在386 PE段寄存器中,“指向”驻留在物理内存中的描述符表,其中为每个段分配8个字节(或者在x64中可能分配16个字节?)以定义基地址,读/写/执行标志和段大小。

通常,这些限制设置为0和2 ^ 32(-1),也称为平面模式。

即使在使用linux / cygwin等兼容的gcc时,也有可能受益于分段架构,因为每个内存访问都根据基址寄存器使用默认分段。 只要使用mov [ebp + ... ]mov [esp + ...]作为基址寄存器访问所有局部变量,就使用堆栈段。 可以在异常处理中使用它来区分堆栈损坏和堆损坏。 它可以用于自动增长的数据/堆栈段等中。它可以用于为应用程序提供单独的数据区域-也许可以通过分段实现内存映射文件API-与linux相反,在Linux中,fs:和gs:是保留给内核。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM