可以谈谈程序载入内存时的重定位吗
查了一些资料,但有些迷糊 尤其是一些名称的理解:什么虚拟地址,相对虚拟地址等等。。
32位电脑,可寻址空间就是有32根地址线 就有2的32次方个状态,也就是4G个内存单元可被寻址。 高2G系统用,低2G是用户程序用。操作系统和CPU配合,使每个进程都可以独占使用2G空间。这2G空间,理论上来讲可以被任一进程任意使用,而且地址是从0开始到2G,线性连续的。 这就是虚拟地址,也叫虚拟地址空间。在这一大段空间中,定一个基址,比如0x00400000,那么对于0x00401000,可以说它的虚拟地址是 0x00401000,也可以说它的相对虚拟地址是0x00001000,一个PE文件可以自己指定基址,也可以使用默认,默认一般就是0x00400000,为了在文件内使用方便,一般就使用相对于基址的地址,即相对虚拟地址。
如果程序载入内存时,是按照默认的或者程序自己指定的基址载入的,那么就不需要重定位,一般EXE文件不需要重定位。
DLL文件一般都是需要重新定位的,因为DLL文件是动态载入的,每次载入地址不同。
下个汇编语言的书看看,如果想深入认真的学,干脆买一本仔细看看吧。
东一榔头西一锤的 还不如系统的学习一下。 靠发帖子比较难以获得系统的知识。