随机地址 - 是(/dynamicbase)和旧学校子分类导致崩溃

问题描述 投票:0回答:1

我注意到一个较旧的应用程序具有

Randomized Base Address
选项设置为
No (/DYNAMICBASE:NO)
。 我将其更改为
Yes
,然后忘记了它。 几天后回来,以调试模式运行该申请,并在几次成功的电话中发现,它坠毁在通话中。

它一直在使用旧的获取和设置方法

GWLP_WNDPROC

,然后回电回到以前的
CallWindowProc(OldWndProc, hwnd, message, wparam, lparam)
中,该方法看起来位于
COMCTL32.DLL.INEFUNE。 我花了一段时间来记住我已经更改了该选项,所以我将选项返回

/DYNAMICBASE:NO

SetWindowSubclass()
,这一切都恢复了正常。

最终,我只是将所有内容都更改为

Yes (/DYNAMICBASE)

方法,它可以与
WndProc
.
一起使用。

但是我想知道,原因是什么原因?

comctl32.dll是否随机移动,那些旧的BOOL CALLBACK MyTreeViewWndProc(HWND htv, UINT message, WPARAM wparam, LPARAM lparam)

地址不再有效?
tia !!

20岁以上的代码的问题是定义了回调:
winapi aslr comctl32
1个回答
0
投票

LRESULT CALLBACK MyTreeViewWndProc(HWND htv, UINT message, WPARAM wparam, LPARAM lparam)

该运行x64,返回值被切断。  应该是:

INT_PTR CALLBACK MyTreeViewWndProc(HWND htv, UINT message, WPARAM wparam, LPARAM lparam)

or

SetWindowsSubclass()

新函数允许编译器在新版本中执行回调参数的定义。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.