首页
社区
课程
招聘
[旧帖] [求助]为什么每个exe文件的基地址都是0x00400000?它们不会相互冲突吗?为什么不是0x00100000? 0.00雪花
发表于: 2008-6-26 23:55 8520

[旧帖] [求助]为什么每个exe文件的基地址都是0x00400000?它们不会相互冲突吗?为什么不是0x00100000? 0.00雪花

2008-6-26 23:55
8520
【求助】为什么每个exe文件的基地址都是0x00400000?它们不会相互冲突吗?为什么不是0x00100000?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你大概没有理解三种地址的概念:逻辑地址,线形地址,物理地址
  1。逻辑地址   
        对于代码段,逻辑地址是代码段选择寄存器CS以及相对偏移量EIP决定的   
        CS:EIP   
  2:线性地址   
        由CS(相当于索引)和GDTR或LDTR(相当于基地址)共同得到段起始地址,再加上EIP得   到   线性地址   
  所谓0x00400000是线性地址的基址
3:物理地址   
        由分页机制,将32位线性地址的前20位作为索引,查页表(每个进程都有自己的独立的页表,相当于每个进程都有自己的独立的4G的地址空间),将线性地址映射到物理内存,得到真正的物理地址,再读取代码或数据。   
   
  因此,每个进程都将自己的4G地址空间映射到有限的物理类存,当进程不太小时,只有一些页面被调入类存,此时页表指向的页地址是物理地址,若访问的页面不再内存,则产生页故障异常,OS会将页面从硬盘调入内存,将暂时不用的页面调出到硬盘
2008-6-26 23:58
0
雪    币: 208
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
楼上的,我还是看不太明白,这个基地址是怎么规定的?为什么非要定为0x00400000,而为什么不是0x00100000
2008-6-27 00:30
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
当然可以是0x00100000了!!
不要拘泥嘛
不过一般约定俗成的:exe基址用0x00400000,dll基址用0x00100000。编译器默认编译出来就是这样的。
基址可以改的
2008-6-27 13:12
0
雪    币: 107
活跃值: (399)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
DLL才是0x00100000

exe基址0x00400000这个你可以改变滴
2008-6-27 13:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
DLL才是0x00100000
2008-6-28 03:49
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
LS误导了,DLL是0x10000000,别看错了……
0x00100000太低了,可能会导致栈不够用,最好别改这么小。
2008-6-28 20:36
0
雪    币: 107
活跃值: (1683)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
已经说的很清楚了,如果楼主还是不清楚,建议看一下操作系统的虚拟内存管理
2008-6-28 22:42
0
游客
登录 | 注册 方可回帖
返回
//