有没有办法让ISO C程序测试(也许是API?)是否获得新的Win10“段堆”(参见https://www.blackhat.com/docs/us-16/materials/us -16-Yason-Windows-10-Segment-Heap-Internals.pdf)?
P.S.:这个想法是一个运行时测试,而不是在 Win32 注册表中查看......
在您链接的幻灯片中,提到了签名。
我已经证实按如下方式检查确实对我有用:
#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
块,以防堆句柄被重新定义为在未来操作系统中不再是指针。