ASLR和Windows系统DLL用于不知道的可执行文件?
从
Microsoft article:
我不太清楚.获取WIndows上的每个进程加载的基本系统DLL:NtDll.dll和kernel32.dll. 如果a具有不可识别的可执行文件,这些系统DLL是否会使用ASLR?也就是说,在Win 7上为每个系统重新启动后,它们是否会在不同的基地址加载,或者它们是否会像在Win XP上一样在系统重启后加载到相同的基址? 为了更清楚我的意思:我的典型虚拟程序的启动堆栈将如下所示: write_cons.exe!wmain() Line 8 C++ write_cons.exe!__tmainCRTStartup() Line 583 + 0x19 bytes C write_cons.exe!wmainCRTStartup() Line 403 C > kernel32.dll!_BaseProcessStart@4() + 0x23 bytes 看看BaseProcessStart的asm,我在XP框中看到: _BaseProcessStart@4: 7C817054 push 0Ch 7C817056 push 7C817080h 7C81705B call __SEH_prolog (7C8024D6h) 7C817060 and dword ptr [ebp-4],0 ... 现在我感兴趣的是以下内容: 在Windows XP上,无论重启此计算机多少次,地址始终为0x7C817054.如果我使用ASLR在Win7上,如果没有为ASLR启用加载kernel32.dll的可执行文件,这个地址是否会在重新启动之间发生变化? (注意:对我来说,atm.,这个地址只有一个小用例:在Visual Studio中,我只能为汇编级函数设置一个“数据断点”,即断点@ 0x7 .. . – 如果我想打破特定的ntdll.dll或kernel32.dll函数,在Windows XP中我不必在重新启动之间调整断点.随着ASLR的推进(这个问题的范围)我将不得不改变重新启动之间的数据断点.)
从技术上讲,系统dll是否被重新定位,它应该无关紧要,因为链接器将绑定到符号而不是地址.这些符号由运行时加载程序解析为实例化系统dll的地址,因此您的二进制文件应该更加明智.然而,从我所看到的,Windows 7将重置每次重启时的基本随机化,包括系统dll(注意:这是在widows服务器2008 R2上调试WOW64应用程序).您也可以通过一些注册编辑对ASLR进行系统范围的禁用,但这并不是真正相关的……
更新: 关于ASLR在this篇文章中的部分解释了重新定位的内容以及何时重新定位.它没有提到基数是否会重置每次重启,但对于系统dll,它永远不会保证在同一地址加载两次,重启或不重启.重要的是根据文章,一切都需要选择加入ASLR系统dll才能重新定位. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-server-2008 – Ping主机名有效但nslookup到主机名
- 如何保持覆盆子计时准确?
- windows-server-2003 – 您是否在Windows服务器上运行防病毒
- windows-8 – 任何WinRT iCommand / CommandBinding实现示例
- 第二天的Windows批处理事件提醒
- windows-server-2008 – 将多个IPv6地址分配给单个接口
- 2019年5月最新win10教育版1903激活密钥和下载
- operating-system – Windows内核模式驱动程序如何访问分页
- 如何在EC2 Windows实例中以编程方式/远程执行程序
- windows环境下安装hadoop
- windows-7 – 如何在Windows 7中模拟触摸事件?
- Windows – 从Microsoft PKI中的CDP和AIA中删除L
- windows-server-2008 – 如何为单个办公室设置多
- windows – 批量从文件名中删除括号
- windows-server-2008 – Windows 2008 R2服务器上
- windows-server-2012-r2 – 如何在实验室中对Win
- winforms – Windows服务的运行时调试技巧?
- windows-server-2003 – 如何在Windows Small Bu
- windows-server-2003 – 为什么我不能将.zip文件
- iphoneX适配刘海屏