能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你大概没有理解三种地址的概念:逻辑地址,线形地址,物理地址
1。逻辑地址
对于代码段,逻辑地址是代码段选择寄存器CS以及相对偏移量EIP决定的
CS:EIP
2:线性地址
由CS(相当于索引)和GDTR或LDTR(相当于基地址)共同得到段起始地址,再加上EIP得 到 线性地址
所谓0x00400000是线性地址的基址
3:物理地址
由分页机制,将32位线性地址的前20位作为索引,查页表(每个进程都有自己的独立的页表,相当于每个进程都有自己的独立的4G的地址空间),将线性地址映射到物理内存,得到真正的物理地址,再读取代码或数据。
因此,每个进程都将自己的4G地址空间映射到有限的物理类存,当进程不太小时,只有一些页面被调入类存,此时页表指向的页地址是物理地址,若访问的页面不再内存,则产生页故障异常,OS会将页面从硬盘调入内存,将暂时不用的页面调出到硬盘
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
楼上的,我还是看不太明白,这个基地址是怎么规定的?为什么非要定为0x00400000,而为什么不是0x00100000
|
能力值:
( LV6,RANK:90 )
|
-
-
4 楼
当然可以是0x00100000了!!
不要拘泥嘛
不过一般约定俗成的:exe基址用0x00400000,dll基址用0x00100000。编译器默认编译出来就是这样的。
基址可以改的
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
DLL才是0x00100000
exe基址0x00400000这个你可以改变滴
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
DLL才是0x00100000
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
LS误导了,DLL是0x10000000,别看错了……
0x00100000太低了,可能会导致栈不够用,最好别改这么小。
|
能力值:
( LV6,RANK:80 )
|
-
-
8 楼
已经说的很清楚了,如果楼主还是不清楚,建议看一下操作系统的虚拟内存管理
|
|
|