Win10“段堆”的 ISO C 运行时测试?

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

有没有办法让ISO C程序测试(也许是API?)是否获得新的Win10“段堆”(参见https://www.blackhat.com/docs/us-16/materials/us -16-Yason-Windows-10-Segment-Heap-Internals.pdf)?

P.S.:这个想法是一个运行时测试,而不是在 Win32 注册表中查看......

winapi malloc heap-memory
1个回答
0
投票

在您链接的幻灯片中,提到了签名。

我已经证实按如下方式检查确实对我有用:

#include <Windows.h>
#include <stdio.h>

int main() {
    DWORD* sign_ptr = ((DWORD*)GetProcessHeap())+4;
    __try
    {
        DWORD sign = *sign_ptr;
        if (sign == 0xddeeddee) {
            printf("Segmented heap\n");
        }
        else {
            printf("Not segmented heap, signature is %08X\n", sign);
        }
    }
    __except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION && GetExceptionInformation()->ExceptionRecord->ExceptionInformation[1] == (ULONG_PTR)sign_ptr)
    {
        printf("Bad pointer is %p\n", sign_ptr);
    }
}

如果我不启用分段堆,它会打印以下内容:

Not segmented heap, signature is FFEEFFEE

我不确定它是否在某个地方有正式记录,还有另一种记录方式。

我放置了

__try
块,以防堆句柄被重新定义为在未来操作系统中不再是指针。

© www.soinside.com 2019 - 2024. All rights reserved.