动态重定位
代码段和数据段 有各自的重定位寄存器,即段寄存器。
段寄存器有ES、CS、SS、DS、FS、GS、LDTR、TR共8个。
ES:扩展段。在串操作时(比如cmovs)目标操作数的基址是ES,源操作数是DS。
CS:代码段,配合EIP使用。
SS: 堆栈段,凡是基址是EBP或ESP的,段前缀就是SS。
DS:数据段,默认的都是DS。
FS、GS:80386 之后定义的。
只有段选择符对程序员是可见的。
qemu monitor中info registers可以看到段寄存器:
从左到右依次是:
sc->selector, sc->base, sc->limit, sc->flags & 0x00ffff00
ES =0000 0000000000000000 ffffffff 00c00000
CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA]
SS =0018 0000000000000000 ffffffff 00c09300 DPL=0 DS [-WA]
DS =0000 0000000000000000 ffffffff 00c00000
FS =0000 0000000000000000 ffffffff 00c00000
GS =0000 ffff8b053bc00000 ffffffff 00c00000
LDT=0000 0000000000000000 ffffffff 00c00000
TR =0040 fffffe12484d7000 00004087 00008b00 DPL=0 TSS64-busy
因篇幅问题不能全部显示,请点此查看更多更全内容