举个很简单的例子:如果说联合国用01表示中国,02表示美国,这里的01和02表示段地址。而各个国家的首都也是01,这个01就是偏移地址。那么0101就表示北京,0201表示华盛顿,这里段地址加偏移地址就能找到具体的城市了。
把内存比作尺子,段地址即厘米刻度,偏移地址即该厘米的毫米刻度
偏移地址:将某一段任一存储单元相对于该段第一个存储单元的相对差叫做该单元的偏移段内偏移量.将段内偏移量转换成16位二进制单元数,即为该单元的偏移地址
基地址 - 概述
段地址其实就是一种基地址,但基地址并不等于就是段地址。
所谓基地址,顾名思义就可以理解为基本地址,他是相对偏移量的计算基准。
在实模式下,通常都是以段+偏移来定位地址,因此说,这时,段地址是基地址的一种。但是在堆栈上,常常不以ss寄存器来作为定址基准,而是经常用bp寄存器来定址,因此,此时堆栈段的段址就不能说是基地址
而保护模式下,不再有“段”的概念,这时的段寄存器里保存的是“段选择子”,根基地址根本就是两回事。
基地址 - 进程的基地址
进程的基地址是指进程的EXE的ImageBase
1、可以从进程的EXE的文件头中直接读取ImageBase值。EXE不存在重定位。
2、可以使用Process32First/Module32First系列API,MODULEENTRY32结构里面有每个EXE/DLL的内存基地址。