您的当前位置:首页指令的装载和运行

指令的装载和运行

2023-03-27 来源:小侦探旅游网

指令的工作原理

指令装入的三种方式

绝对装入(不重要)

可重定位装入(不重要)

动态运行时装入(重要)

动态重定位

从写程序到程序运行

代码段和数据段 有各自的重定位寄存器,即段寄存器

段寄存器

段寄存器有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

逻辑地址

线性地址

链接的三种方式

静态链接

装入时动态链接

运行时动态链接


因篇幅问题不能全部显示,请点此查看更多更全内容