首页
社区
课程
招聘
[讨论]同一个exe在不同运行环境下内存地址变吗?
发表于: 2008-11-19 12:44 5842

[讨论]同一个exe在不同运行环境下内存地址变吗?

2008-11-19 12:44
5842
比如在xp上编译生成一个exe 发现每次运行后 它内部的一个变量都用在一个地址

如果拷贝这个exe到windows7 vista 2000 98等其它机器上运行 这个地址是否会变呢?

不清楚这个地址除了编程代码有关外 还和什么有关系? 谢谢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
多数情况下,正常编译连接的EXE程序会在固定基址加载,从win98到vista,连接器的默认都是从地址空间的4M位置作为基址。但系统并不保证一定不变,在无法加载到默认的连接地址时,会重定位。而DLL模块则几乎总是重定位,并且在不同版本的系统中,默认的dll加载基址是不同的。

我说的正常连接,是指没有修改连接器参数的情况。
2008-11-19 17:57
0
雪    币: 136
活跃值: (20)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
3
看你的变量使用“堆”还是“栈”
2008-11-19 23:04
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果基地址没有被修改。是不会变的

你这个变量是局部 还是全局?
2008-11-20 01:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这么说全局变量应不变 局部变量是变的 ?

全局变量用的是堆 局部变量用的是栈?

为什么堆不变 而栈会变呢?
2008-11-20 23:22
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
反编译下程序 仔细看看

用写汇编程序一样去看问题就好了
2008-11-20 23:28
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
如果EXE文件有重定位表,Vista会随机改变文件的基址。
2008-11-21 02:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
一般都会变吧
2008-11-22 18:02
0
游客
登录 | 注册 方可回帖
返回
//