#include #include #include #include #include #include #include #include #define DbgPrint printf #define NtTerminateProcess(a,b) ExitProcess((ULONG)(b)) __cdecl main( ) { LONG i, j; PULONG p4, p3, p2, p1, oldp1; SIZE_T Size1; NTSTATUS status; HANDLE CurrentProcessHandle; HANDLE GiantSection; MEMORY_BASIC_INFORMATION MemInfo; ULONG OldProtect; STRING Name3; HANDLE Section1; OBJECT_ATTRIBUTES ObjectAttributes; ULONG ViewSize; ULONG NumberOfAllocs = 0; TIME DelayTime = {-15 * 1000 * 1000 * 10, -1}; OBJECT_ATTRIBUTES Object1Attributes; LARGE_INTEGER SectionSize; BOOL PrintedOnce = FALSE; CurrentProcessHandle = NtCurrentProcess(); for(i = 0; i < 3; i += 1){ DbgPrint("Hello World...\n\n"); } DbgPrint("allocating virtual memory\n"); for (;;) { p1 = NULL; Size1 = 800; status = NtAllocateVirtualMemory(CurrentProcessHandle, (PVOID *)&p1, 0, &Size1, MEM_RESERVE, PAGE_READWRITE); if (!NT_SUCCESS(status)) { break; } if ((PrintedOnce == FALSE) && ((ULONG_PTR)p1 >= 0x80000000)) { printf("allocate high %p\n", p1); PrintedOnce = TRUE; } NumberOfAllocs += 1; } DbgPrint("allocVM failed after %ld allocs of 800 bytes\n", NumberOfAllocs); DbgPrint("created vm status %X start %p size %d\n", status, p1, Size1); for (i = 0; i < 4; i += 1) { p1 = NULL; Size1 = 800; status = NtAllocateVirtualMemory(CurrentProcessHandle, (PVOID *)&p1, 0, &Size1, MEM_RESERVE, PAGE_READWRITE); DbgPrint("created vm status %X start %p size %d\n", status, p1, Size1); } DbgPrint("delaying for 15 seconds\n"); NtDelayExecution(FALSE, &DelayTime); DbgPrint ("end of delay\n"); DbgPrint ("paged pool allocations\n"); NumberOfAllocs = 0; for (;;) { // // Create a giant section (100mb) // InitializeObjectAttributes(&Object1Attributes, NULL, 0, NULL, NULL); SectionSize.QuadPart = (100 * 1024 * 1024); status = NtCreateSection(&GiantSection, SECTION_MAP_READ | SECTION_MAP_WRITE, &Object1Attributes, &SectionSize, PAGE_READWRITE, SEC_RESERVE, NULL); if (!NT_SUCCESS(status)) { break; } NumberOfAllocs += 1; } DbgPrint("Create section failed after %ld creates of 2GB\n", NumberOfAllocs); DbgPrint("create section status %X\n", status); DbgPrint("delaying for 15 seconds\n"); NtDelayExecution(FALSE, &DelayTime); DbgPrint("end of delay\n"); DbgPrint("that's all\n"); NtTerminateProcess(NtCurrentProcess(), STATUS_SUCCESS); return 0; }