|  | // created by cgo -cdefs and then converted to Go | 
|  | // cgo -cdefs defs_windows.go | 
|  |  | 
|  | package runtime | 
|  |  | 
|  | const ( | 
|  | _PROT_NONE  = 0 | 
|  | _PROT_READ  = 1 | 
|  | _PROT_WRITE = 2 | 
|  | _PROT_EXEC  = 4 | 
|  |  | 
|  | _MAP_ANON    = 1 | 
|  | _MAP_PRIVATE = 2 | 
|  |  | 
|  | _DUPLICATE_SAME_ACCESS   = 0x2 | 
|  | _THREAD_PRIORITY_HIGHEST = 0x2 | 
|  |  | 
|  | _SIGINT              = 0x2 | 
|  | _SIGTERM             = 0xF | 
|  | _CTRL_C_EVENT        = 0x0 | 
|  | _CTRL_BREAK_EVENT    = 0x1 | 
|  | _CTRL_CLOSE_EVENT    = 0x2 | 
|  | _CTRL_LOGOFF_EVENT   = 0x5 | 
|  | _CTRL_SHUTDOWN_EVENT = 0x6 | 
|  |  | 
|  | _CONTEXT_CONTROL = 0x10001 | 
|  | _CONTEXT_FULL    = 0x10007 | 
|  |  | 
|  | _EXCEPTION_ACCESS_VIOLATION     = 0xc0000005 | 
|  | _EXCEPTION_BREAKPOINT           = 0x80000003 | 
|  | _EXCEPTION_FLT_DENORMAL_OPERAND = 0xc000008d | 
|  | _EXCEPTION_FLT_DIVIDE_BY_ZERO   = 0xc000008e | 
|  | _EXCEPTION_FLT_INEXACT_RESULT   = 0xc000008f | 
|  | _EXCEPTION_FLT_OVERFLOW         = 0xc0000091 | 
|  | _EXCEPTION_FLT_UNDERFLOW        = 0xc0000093 | 
|  | _EXCEPTION_INT_DIVIDE_BY_ZERO   = 0xc0000094 | 
|  | _EXCEPTION_INT_OVERFLOW         = 0xc0000095 | 
|  |  | 
|  | _INFINITE     = 0xffffffff | 
|  | _WAIT_TIMEOUT = 0x102 | 
|  |  | 
|  | _EXCEPTION_CONTINUE_EXECUTION = -0x1 | 
|  | _EXCEPTION_CONTINUE_SEARCH    = 0x0 | 
|  | ) | 
|  |  | 
|  | type systeminfo struct { | 
|  | anon0                       [4]byte | 
|  | dwpagesize                  uint32 | 
|  | lpminimumapplicationaddress *byte | 
|  | lpmaximumapplicationaddress *byte | 
|  | dwactiveprocessormask       uint32 | 
|  | dwnumberofprocessors        uint32 | 
|  | dwprocessortype             uint32 | 
|  | dwallocationgranularity     uint32 | 
|  | wprocessorlevel             uint16 | 
|  | wprocessorrevision          uint16 | 
|  | } | 
|  |  | 
|  | type exceptionrecord struct { | 
|  | exceptioncode        uint32 | 
|  | exceptionflags       uint32 | 
|  | exceptionrecord      *exceptionrecord | 
|  | exceptionaddress     *byte | 
|  | numberparameters     uint32 | 
|  | exceptioninformation [15]uint32 | 
|  | } | 
|  |  | 
|  | type floatingsavearea struct { | 
|  | controlword   uint32 | 
|  | statusword    uint32 | 
|  | tagword       uint32 | 
|  | erroroffset   uint32 | 
|  | errorselector uint32 | 
|  | dataoffset    uint32 | 
|  | dataselector  uint32 | 
|  | registerarea  [80]uint8 | 
|  | cr0npxstate   uint32 | 
|  | } | 
|  |  | 
|  | type context struct { | 
|  | contextflags      uint32 | 
|  | dr0               uint32 | 
|  | dr1               uint32 | 
|  | dr2               uint32 | 
|  | dr3               uint32 | 
|  | dr6               uint32 | 
|  | dr7               uint32 | 
|  | floatsave         floatingsavearea | 
|  | seggs             uint32 | 
|  | segfs             uint32 | 
|  | seges             uint32 | 
|  | segds             uint32 | 
|  | edi               uint32 | 
|  | esi               uint32 | 
|  | ebx               uint32 | 
|  | edx               uint32 | 
|  | ecx               uint32 | 
|  | eax               uint32 | 
|  | ebp               uint32 | 
|  | eip               uint32 | 
|  | segcs             uint32 | 
|  | eflags            uint32 | 
|  | esp               uint32 | 
|  | segss             uint32 | 
|  | extendedregisters [512]uint8 | 
|  | } | 
|  |  | 
|  | func (c *context) ip() uintptr { return uintptr(c.eip) } | 
|  | func (c *context) sp() uintptr { return uintptr(c.esp) } | 
|  |  | 
|  | // 386 does not have link register, so this returns 0. | 
|  | func (c *context) lr() uintptr      { return 0 } | 
|  | func (c *context) set_lr(x uintptr) {} | 
|  |  | 
|  | func (c *context) set_ip(x uintptr) { c.eip = uint32(x) } | 
|  | func (c *context) set_sp(x uintptr) { c.esp = uint32(x) } | 
|  |  | 
|  | func dumpregs(r *context) { | 
|  | print("eax     ", hex(r.eax), "\n") | 
|  | print("ebx     ", hex(r.ebx), "\n") | 
|  | print("ecx     ", hex(r.ecx), "\n") | 
|  | print("edx     ", hex(r.edx), "\n") | 
|  | print("edi     ", hex(r.edi), "\n") | 
|  | print("esi     ", hex(r.esi), "\n") | 
|  | print("ebp     ", hex(r.ebp), "\n") | 
|  | print("esp     ", hex(r.esp), "\n") | 
|  | print("eip     ", hex(r.eip), "\n") | 
|  | print("eflags  ", hex(r.eflags), "\n") | 
|  | print("cs      ", hex(r.segcs), "\n") | 
|  | print("fs      ", hex(r.segfs), "\n") | 
|  | print("gs      ", hex(r.seggs), "\n") | 
|  | } | 
|  |  | 
|  | type overlapped struct { | 
|  | internal     uint32 | 
|  | internalhigh uint32 | 
|  | anon0        [8]byte | 
|  | hevent       *byte | 
|  | } | 
|  |  | 
|  | type memoryBasicInformation struct { | 
|  | baseAddress       uintptr | 
|  | allocationBase    uintptr | 
|  | allocationProtect uint32 | 
|  | regionSize        uintptr | 
|  | state             uint32 | 
|  | protect           uint32 | 
|  | type_             uint32 | 
|  | } |