VC++ 如何让DLL的导出函数的地址不变

Maxcw 2014-11-07 11:28:39
在写消息钩子的时候遇到一个崩溃的问题,原因是我setwindowhook之后,没unwindoshook之前,去用一个新的dll替换掉旧的dll,这样就崩溃了,大家很奇怪说,setwindowhook之后dll是绑定的啊!不能替换或者删除,其实不是,只要别的程序没有窗口,那么这个dll是不会被加载的,现在问题就是别的程序里面已经保存了hook的dll的某个函数地址,换了新dll,这个地址就无效了,导致崩溃,我以前听别人讲过,说可以固定dll里面的首个函数的地址,那样无论你怎么替换dll,只要地址不变就不会有问题了,请问大家怎么固定呢?
...全文
200 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Maxcw 2014-12-08
  • 打赏
  • 举报
回复
引用 1 楼 zhdhj 的回复:
你要做DLL的热切换? 在linker里面BaseAddress是可以指定DLL预期的加载地址的,一般DLL是0x10000000,你可以设置一个比较高地址一般人家不会和你抢,但是函数的地址就有linker自己决定了,这个和你数据段和代码段的大小有关。
这个只是DLL的加载地址,无法满足函数相对地址不变的需求,我找到方法了,利用合并节就可以实现首函数相对地址不变。
zhdhj 2014-11-07
  • 打赏
  • 举报
回复
你要做DLL的热切换? 在linker里面BaseAddress是可以指定DLL预期的加载地址的,一般DLL是0x10000000,你可以设置一个比较高地址一般人家不会和你抢,但是函数的地址就有linker自己决定了,这个和你数据段和代码段的大小有关。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧