ASLR 和 VirtualAlloc 的奇怪行为

乔治·毕晓普

我的问题是我尝试将内存分配给我制作的应用程序(x86)(通过链接器禁用了 ASLR),如下所示:

void* space = VirtualAllocEx(processHandle, LPVOID(0x400000),
    0x20000, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);

和的返回值VirtualAllocExNULL(0)。如您所见,我尝试在地址空间 0x400000 中分配空间,这是可执行文件的默认虚拟地址空间。现在奇怪的是,这种内存分配适用于 ASLR,但它不适用于禁用 ASLR。

所以我的问题是:为什么会这样?我的意思是,为什么 ASLR 能让您在这样一个“关键”地址中分配空间?而且,为什么这种内存分配在没有 ASLR 的情况下会失败?这对现代系统没有安全威胁吗?

保罗·桑德斯

禁用 ASLR 后,您的代码将位于地址 0x400000 处,因此分配将失败。

启用 ASLR 后,您的代码可以在任何地方,因此此代码有时会(可能是大多数时候)工作,但有时会明显随机失败,这更糟。

解决方法:传lpAddress为NULL,让系统决定分配去哪里。你为什么想做其他事情?

请注意,从安全角度(或实际上是其他任何角度)来看,地址 0x400000 没有什么特别之处。只是 Windows 碰巧在禁用 ASLR 的情况下将您的代码建立在那里。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASLR和地址

来自分类Dev

||奇怪的Ruby行为 和 &&

来自分类Dev

加入和的奇怪行为

来自分类Dev

OpenXml 和奇怪的行为

来自分类Dev

DateTime和DateTimeZone的奇怪行为

来自分类Dev

Camera和SurfaceView的奇怪行为

来自分类Dev

时区和SimpleDateFormat奇怪的行为

来自分类Dev

$ .clone()和$ .data()奇怪的行为

来自分类Dev

查找和du的奇怪行为

来自分类Dev

systimestamp和sysdate的奇怪行为

来自分类Dev

Camera和SurfaceView的奇怪行为

来自分类Dev

$ .clone()和$ .data()奇怪的行为

来自分类Dev

strpos和Ø的奇怪行为

来自分类Dev

奇怪的printf和scanf行为

来自分类Dev

gluPerspective和gluLookAt的奇怪行为

来自分类Dev

TextView 和 ListView 的奇怪行为

来自分类Dev

(ubuntu) ASLR - 清除混乱,奇怪的结果

来自分类Dev

momentjs-奇怪的行为与startOf和endOf

来自分类Dev

Python:和/或运算符奇怪的行为

来自分类Dev

C ++ float和int除法奇怪的行为

来自分类Dev

WordPress的WPDB和MySQL的奇怪的行为

来自分类Dev

CSS中奇怪的反斜杠和行为

来自分类Dev

parseInt和负零在javascript:奇怪的行为?

来自分类Dev

动作编号加和减奇怪的行为

来自分类Dev

StreamReader和EBCDIC的奇怪行为:为什么?

来自分类Dev

奇怪的行为:pcolormesh和meshgrid(简单)

来自分类Dev

MatchCollection和Regex匹配奇怪的行为

来自分类Dev

csvwrite和写入日期的奇怪行为

来自分类Dev

__slots__和泡菜的奇怪行为