int i;
for (size = 0x40000000; size > 0; size = ((size >> 3) * 7) &~ 0xFFF) {
- printf("trying size=%d\n", size);
minefield_region = VirtualAlloc(NULL, size,
MEM_RESERVE, PAGE_NOACCESS);
if (minefield_region)
break;
}
minefield_size = size;
- printf("got region %p size %d\n", minefield_region, minefield_size);
/*
* Firstly, allocate a section of that to be the admin block.
admin_size = (minefield_npages * 2 + PAGESIZE-1) &~ (PAGESIZE-1);
minefield_npages = (minefield_size - admin_size) / PAGESIZE;
minefield_pages = (char *)minefield_region + admin_size;
- printf("admin at %p, pages at %p, npages %x, admin_size %x\n",
- minefield_admin, minefield_pages, minefield_npages,
- admin_size);
/*
* Commit the admin region.
static FILE *debug_fp = NULL;
static int debug_got_console = 0;
-void dprintf(char *fmt, ...) {
- char buf[2048];
+static void dputs (char *buf) {
DWORD dw;
- va_list ap;
if (!debug_got_console) {
AllocConsole();
debug_fp = fopen("debug.log", "w");
}
- va_start(ap, fmt);
- vsprintf(buf, fmt, ap);
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), buf, strlen(buf), &dw, NULL);
fputs(buf, debug_fp);
fflush(debug_fp);
+}
+
+
+void dprintf(char *fmt, ...) {
+ char buf[2048];
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsprintf(buf, fmt, ap);
+ dputs (buf);
va_end(ap);
}
-#endif
+
+
+void debug_memdump (void *buf, int len, int L) {
+ int i;
+ unsigned char *p = buf;
+ if (L) {
+ int delta;
+ dprintf ("\t%d (0x%x) bytes:\n", len, len);
+ delta = 15 & (int) p;
+ p -= delta;
+ len += delta;
+ }
+ for (; 0 < len; p += 16, len -= 16) {
+ dputs ("\t");
+ if (L) dprintf ("%p: ", p);
+ for (i = 0; i < 16 && i < len; ++i) {
+ if (&p[i] < (unsigned char *) buf) {
+ dputs (" "); /* 3 spaces */
+ } else {
+ dprintf (
+ "%c%02.2x",
+ &p[i] != (unsigned char *) buf && i % 4 ? '.' : ' ',
+ p[i]
+ );
+ }
+ }
+ dputs ("\n");
+ }
+}
+
+#endif /* def DEBUG */
+