如何让exe基地址不乱跑
acmilan2017/09/03软件综合 IP:四川
exe基地址乱跑,是因为在比较新的Visual Studio中,link添加了/dynamicbase参数,这个参数是用来声明程序在Windows Vista以后的系统中兼容地址空间布局随机化(ASLR)安全特性的。

另外还有一个参数是/fixed,这个参数是删除.reloc节用的。由于exe载入较早,只有启用/dynamicbase时,或者在非常古老的win32s平台运行时,才需要exe有.reloc节。dll则必须有.reloc节,否则地址空间重叠的dll只能载入一个,因此dll一般来说不能指定/fixed参数。

按照如下设置即可将exe基地址还原为Windows Vista之前的特性,x86加载到0x00400000,x64加载到0x0000000140000000:

dynamicbase.png

一个有趣的现象是,x64平台下无论有没有指定/dynamicbase,都会将exe加载到4GB以上,应该是为了方便捕捉地址截断错误而设计的。

[修改于 7年4个月前 - 2017/09/03 22:08:34]

来自:计算机科学 / 软件综合
2
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
acmilan 作者
7年4个月前 修改于 7年4个月前 IP:四川
839710
如果需要找exe的基地址,通过(w)WinMain函数的参数,或者通过GetModuleHandle(NULL)。
如果需要当前dll的基地址,通过DllMain函数的参数。
除此以外,还有一种方法,可以通过链接__ImageBase符号来获得基地址。
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#define HINST_THISCOMPONENT ((HINSTANCE)&__ImageBase)
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
时钟脉冲
4年9个月前 IP:北京
876755

摸米兰姐姐

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
acmilan
进士 学者 笔友
文章
461
回复
2934
学术分
4
2009/05/30注册,5年11个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}