Initial commit.
authorMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Thu, 5 Aug 2010 20:03:07 +0000 (22:03 +0200)
committerMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Thu, 5 Aug 2010 20:03:07 +0000 (22:03 +0200)
dump-active-process.c [new file with mode: 0644]
get-system-info.c [new file with mode: 0644]
global-memory-status.c [new file with mode: 0644]
memory-layout-stuff.c [new file with mode: 0644]
virtual-query.c [new file with mode: 0644]

diff --git a/dump-active-process.c b/dump-active-process.c
new file mode 100644 (file)
index 0000000..3eb132b
--- /dev/null
@@ -0,0 +1,184 @@
+#include <stdio.h>
+#include <windows.h>
+#include <ctype.h>
+
+void
+dump_mbi_header ()
+{
+  printf ("alc-base   alc-prot address    size       state    protect  type     \n");
+} 
+
+
+int
+dump_protect_flags (DWORD flags)
+{
+  DWORD pr = flags & (PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE
+                     | PAGE_EXECUTE_WRITECOPY | PAGE_READONLY
+                     | PAGE_READWRITE | PAGE_WRITECOPY);
+  DWORD pw = flags & (PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY
+                     | PAGE_READWRITE | PAGE_WRITECOPY);
+  DWORD pc = flags & (PAGE_EXECUTE_WRITECOPY | PAGE_WRITECOPY);
+  DWORD px = flags & (PAGE_EXECUTE | PAGE_EXECUTE_READ
+                     | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY);
+  
+  printf ("%c%c%c %c%c%c  ",
+         pr ? 'r' : '-', pc ? 'c' : (pw ? 'w' : '-'), px ? 'x' : '-',
+         (flags & PAGE_GUARD) ? 'g' : '-',
+         (flags & PAGE_NOCACHE) ? 'n' : '-',
+#ifdef PAGE_PHYSICAL
+         (flags & PAGE_PHYSICAL) ? 'p' : 
+#endif
+         '-');
+  return pr;
+}
+
+
+void
+dump_state (DWORD state)
+{
+  switch (state)
+    {
+    case MEM_COMMIT:
+      printf ("commit   ");
+      return;
+    case MEM_FREE:
+      printf ("free     ");
+      return;
+    case MEM_RESERVE:
+      printf ("reserve  ");
+      return;
+    default:
+      printf ("unknown  ");
+    }
+}
+
+
+void
+dump_type (DWORD mtype)
+{
+  switch (mtype)
+    {
+    case MEM_IMAGE:
+      printf ("image    ");
+      return;
+    case MEM_MAPPED:
+      printf ("mapped   ");
+      return;
+    case MEM_PRIVATE:
+      printf ("private  ");
+      return;
+    default:
+      printf ("unknown  ");
+    }
+}
+
+
+void
+dump_region (unsigned char *base, unsigned int size)
+{
+  int i;
+  int in_nulls = 0;
+  /* Base and size are page-aligned.  */
+  while (size != 0)
+    {
+      for (i = 0; i < 16; i++)
+       if (base[i])
+         break;
+      if (i == 16)
+       {
+         /* Only zeroes.  */
+         if (! in_nulls)
+           {
+             printf ("*\n");
+             in_nulls = 1;
+           }
+         goto next;
+       }
+      in_nulls = 0;
+      printf ("0x%08x:", base);
+      for (i = 0; i < 16; i++)
+       {
+         if (i == 8)
+           printf (" ");
+         printf (" %02x", base[i]);
+       }
+      printf ("  ");
+      for (i = 0; i < 16; i++)
+       {
+         if (i == 8)
+           printf (" ");
+         printf ("%c", isprint(base[i]) ? base[i] : '.');
+       }
+      printf ("\n");
+    next:
+      base += 16;
+      size -= 16;
+    }
+}
+
+
+void
+dump_mbi (PMEMORY_BASIC_INFORMATION mbi)
+{
+  int pr;
+  printf ("0x%08x ", mbi->AllocationBase);
+  dump_protect_flags (mbi->AllocationProtect);
+  printf ("0x%08x ", mbi->BaseAddress);
+  printf ("0x%08x ", mbi->RegionSize);
+  dump_state (mbi->State);
+  pr = dump_protect_flags (mbi->Protect);
+  dump_type (mbi->Type);
+  printf ("\n");
+  if (pr)
+    dump_region (mbi->BaseAddress, mbi->RegionSize);
+}
+
+
+int
+main (int argc, char* argv[])
+{
+  MEMORY_BASIC_INFORMATION mbi;
+  SYSTEM_INFO si;
+  void *addr;
+  
+  memset (&si, '\0', sizeof (si));
+  GetSystemInfo (&si);
+  dump_mbi_header ();
+
+  addr = 0;
+  do
+    {
+      DWORD res;
+      void *new_addr;
+
+      memset (&mbi, '\0', sizeof (mbi));
+      res = VirtualQuery (addr, &mbi, sizeof (mbi));
+      if (res == 0)
+       {
+          printf ("Skipping over %p\n", addr);
+         new_addr = addr + si.dwPageSize;
+         if (new_addr < addr)
+           break;
+         addr = new_addr;
+          continue;
+        }
+      if (res != sizeof (mbi))
+       {
+         printf ("Unexpected return size: %i (expected %i)\n",
+                 res, sizeof (mbi));
+       }
+      dump_mbi (&mbi);
+      /* Check for overflow.  */
+      new_addr = addr + mbi.RegionSize;
+      if (new_addr < addr)
+       break;
+      addr = new_addr;
+    }
+  while (1);
+
+  /* Give ssh time to flush buffers.  */
+  fflush (stdout);
+  Sleep (300);
+  return 0;
+}
diff --git a/get-system-info.c b/get-system-info.c
new file mode 100644 (file)
index 0000000..3eba7fd
--- /dev/null
@@ -0,0 +1,72 @@
+#include <stdio.h>
+#include <windows.h>
+
+char const*
+get_proc_arch (WORD proc_arch)
+{
+  switch (proc_arch)
+    {
+    case PROCESSOR_ARCHITECTURE_INTEL:
+      return "INTEL";
+
+    case PROCESSOR_ARCHITECTURE_MIPS:
+      return "MIPS";
+
+    case PROCESSOR_ARCHITECTURE_ALPHA:
+      return "ALPHA";
+
+    case PROCESSOR_ARCHITECTURE_PPC:
+      return "PPC";
+
+    case PROCESSOR_ARCHITECTURE_SHX:
+      return "SHX";
+
+    case PROCESSOR_ARCHITECTURE_ARM:
+      return "ARM";
+
+    case PROCESSOR_ARCHITECTURE_IA64:
+      return "IA64";
+
+    case PROCESSOR_ARCHITECTURE_ALPHA64:
+      return "ALPHA64";
+
+    case PROCESSOR_ARCHITECTURE_MSIL:
+      return "MSIL";
+
+    case PROCESSOR_ARCHITECTURE_AMD64:
+      return "AMD64";
+
+    case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64:
+      return "WIN64";
+
+    case PROCESSOR_ARCHITECTURE_UNKNOWN:
+      return "UNKNOWN";
+
+    default:
+      return "(unknown)";
+    }
+};
+
+
+int
+main (int argc, char* argv[])
+{
+  SYSTEM_INFO si;
+  memset (&si, '\0', sizeof (si));
+
+  GetSystemInfo (&si);
+  printf ("Processor Architecture/Type/Level/Revision: %s/%i/%i/%i\n",
+         get_proc_arch (si.wProcessorArchitecture),
+         si.dwProcessorType, (int) si.wProcessorLevel, (int)si.wProcessorRevision);
+  printf ("Page Size: %i\n", si.dwPageSize);
+  printf ("Application Virtual Address Space: %p - %p\n",
+         si.lpMinimumApplicationAddress,
+         si.lpMaximumApplicationAddress);
+  printf ("Allocation Granularity: %i\n",
+         si.dwAllocationGranularity);
+
+  /* Give ssh time to flush buffers.  */
+  fflush (stdout);
+  Sleep (300);
+  return 0;
+}
diff --git a/global-memory-status.c b/global-memory-status.c
new file mode 100644 (file)
index 0000000..7816b81
--- /dev/null
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <windows.h>
+
+int
+main (int argc, char* argv[])
+{
+  MEMORYSTATUS ms;
+  memset (&ms, '\0', sizeof (ms));
+  ms.dwLength = sizeof (ms);
+
+  GlobalMemoryStatus (&ms);
+  printf ("Overall memory load (0-100): %i\n",
+         ms.dwMemoryLoad);
+  printf ("Physical memory available/total: 0x%08x/0x%08x (%i)\n",
+         ms.dwAvailPhys, ms.dwTotalPhys);
+  printf ("Pagefile memory available/total: 0x%08x/0x%08x (%i)\n",
+         ms.dwAvailPageFile, ms.dwTotalPageFile);
+  printf ("Virtual  memory available/total: 0x%08x/0x%08x (%i)\n",
+         ms.dwAvailVirtual, ms.dwTotalVirtual);
+
+  /* Give ssh time to flush buffers.  */
+  fflush (stdout);
+  Sleep (300);
+  return 0;
+}
diff --git a/memory-layout-stuff.c b/memory-layout-stuff.c
new file mode 100644 (file)
index 0000000..3629db6
--- /dev/null
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <windows.h>
+
+int some_data;
+char *str = "test";
+int some_more_data = 10;
+
+int
+main (int argc, char* argv[])
+{
+  int a = argc;
+  void *p = malloc (128);
+
+  printf ("Code:  %p\n", &main);
+  printf ("RO D:  %p\n", str);
+  printf ("RW D:  %p\n", &some_more_data);
+  printf ("BSS:   %p\n", &some_data);  
+  printf ("Stack: %p\n", &a);
+  printf ("Heap:  %p\n", p);
+  printf ("DLL:   %p\n", GetProcAddress(GetModuleHandle(TEXT("coredll.dll")), 
+       TEXT("Sleep")));
+
+  /* Give ssh time to flush buffers.  */
+  fflush (stdout);
+  Sleep (300);
+  return 0;
+}
diff --git a/virtual-query.c b/virtual-query.c
new file mode 100644 (file)
index 0000000..c74cc2d
--- /dev/null
@@ -0,0 +1,134 @@
+#include <stdio.h>
+#include <windows.h>
+
+void
+dump_mbi_header ()
+{
+  printf ("alc-base   alc-prot address    size       state    protect  type     \n");
+} 
+
+
+void
+dump_protect_flags (DWORD flags)
+{
+  DWORD pr = flags & (PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE
+                     | PAGE_EXECUTE_WRITECOPY | PAGE_READONLY
+                     | PAGE_READWRITE | PAGE_WRITECOPY);
+  DWORD pw = flags & (PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY
+                     | PAGE_READWRITE | PAGE_WRITECOPY);
+  DWORD pc = flags & (PAGE_EXECUTE_WRITECOPY | PAGE_WRITECOPY);
+  DWORD px = flags & (PAGE_EXECUTE | PAGE_EXECUTE_READ
+                     | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY);
+  
+  printf ("%c%c%c %c%c%c  ",
+         pr ? 'r' : '-', pc ? 'c' : (pw ? 'w' : '-'), px ? 'x' : '-',
+         (flags & PAGE_GUARD) ? 'g' : '-',
+         (flags & PAGE_NOCACHE) ? 'n' : '-',
+#ifdef PAGE_PHYSICAL
+         (flags & PAGE_PHYSICAL) ? 'p' : 
+#endif
+         '-');
+}
+
+
+void
+dump_state (DWORD state)
+{
+  switch (state)
+    {
+    case MEM_COMMIT:
+      printf ("commit   ");
+      return;
+    case MEM_FREE:
+      printf ("free     ");
+      return;
+    case MEM_RESERVE:
+      printf ("reserve  ");
+      return;
+    default:
+      printf ("unknown  ");
+    }
+}
+
+
+void
+dump_type (DWORD mtype)
+{
+  switch (mtype)
+    {
+    case MEM_IMAGE:
+      printf ("image    ");
+      return;
+    case MEM_MAPPED:
+      printf ("mapped   ");
+      return;
+    case MEM_PRIVATE:
+      printf ("private  ");
+      return;
+    default:
+      printf ("unknown  ");
+    }
+}
+
+
+void
+dump_mbi (PMEMORY_BASIC_INFORMATION mbi)
+{
+  printf ("0x%08x ", mbi->AllocationBase);
+  dump_protect_flags (mbi->AllocationProtect);
+  printf ("0x%08x ", mbi->BaseAddress);
+  printf ("0x%08x ", mbi->RegionSize);
+  dump_state (mbi->State);
+  dump_protect_flags (mbi->Protect);
+  dump_type (mbi->Type);
+  printf ("\n");
+}
+
+
+int
+main (int argc, char* argv[])
+{
+  MEMORY_BASIC_INFORMATION mbi;
+  SYSTEM_INFO si;
+  void *addr;
+  
+  memset (&si, '\0', sizeof (si));
+  GetSystemInfo (&si);
+  dump_mbi_header ();
+
+  addr = 0;
+  do
+    {
+      DWORD res;
+      void *new_addr;
+
+      memset (&mbi, '\0', sizeof (mbi));
+      res = VirtualQuery (addr, &mbi, sizeof (mbi));
+      if (res == 0)
+       {
+          printf ("Skipping over %p\n", addr);
+         new_addr = addr + si.dwPageSize;
+         if (new_addr < addr)
+           break;
+          addr = new_addr; 
+         continue;
+        }
+      if (res != sizeof (mbi))
+       {
+         printf ("Unexpected return size: %i (expected %i)\n",
+                 res, sizeof (mbi));
+       }
+      dump_mbi (&mbi);
+      /* Check for overflow.  */
+      new_addr = addr + mbi.RegionSize;
+      if (new_addr < addr)
+       break;
+      addr = new_addr;
+    }
+  while (1);
+
+  /* Give ssh time to flush buffers.  */
+  fflush (stdout);
+  Sleep (300);
+  return 0;
+}