Files
Viper_VRTE/w32/win32memory.vp
T
TermiNexus db3be6968f fix(memhub,gzip): 内存池 OOM 归属画像与 free 拒绝现场;gzip 注解 *= 词法粘连
memhub: alloc 失败打印归属 site/ctx 与存活块 order 分布(新增 dump_alive_orders);free 被 _is_valid_ptr 拒绝时首次打印现场;接通 big_alloc_count

gzip: ub: uchar*= buf 补空格(*= 被词法合并为单 OP,注解止于 uchar)

新增 traceback 模块;删除 dbgstack.vp;其余模块随新语法与尺寸口径同步
2026-09-26 19:27:24 +08:00

74 lines
3.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import t
from stdint import *
from w32.win32base import *
MEM_COMMIT: t.CDefine = 0x00001000
MEM_RESERVE: t.CDefine = 0x00002000
MEM_DECOMMIT: t.CDefine = 0x00004000
MEM_RELEASE: t.CDefine = 0x00008000
MEM_FREE: t.CDefine = 0x00010000
MEM_RESET: t.CDefine = 0x00080000
MEM_TOP_DOWN: t.CDefine = 0x00100000
MEM_WRITE_WATCH: t.CDefine = 0x00200000
MEM_PHYSICAL: t.CDefine = 0x00400000
MEM_LARGE_PAGES: t.CDefine = 0x20000000
PAGE_NOACCESS: t.CDefine = 0x01
PAGE_READONLY: t.CDefine = 0x02
PAGE_READWRITE: t.CDefine = 0x04
PAGE_WRITECOPY: t.CDefine = 0x08
PAGE_EXECUTE: t.CDefine = 0x10
PAGE_EXECUTE_READ: t.CDefine = 0x20
PAGE_EXECUTE_READWRITE: t.CDefine = 0x40
PAGE_EXECUTE_WRITECOPY: t.CDefine = 0x80
PAGE_GUARD: t.CDefine = 0x100
PAGE_NOCACHE: t.CDefine = 0x200
PAGE_WRITECOMBINE: t.CDefine = 0x400
HEAP_NO_SERIALIZE: t.CDefine = 0x00000001
HEAP_GROWABLE: t.CDefine = 0x00000002
HEAP_GENERATE_EXCEPTIONS: t.CDefine = 0x00000004
HEAP_ZERO_MEMORY: t.CDefine = 0x00000008
HEAP_REALLOC_IN_PLACE_ONLY: t.CDefine = 0x00000010
class MEMORY_BASIC_INFORMATION():
BaseAddress: VOIDPTR
AllocationBase: VOIDPTR
AllocationProtect: DWORD
RegionSize: sizet
State: DWORD
Protect: DWORD
Type: DWORD
extern def VirtualAlloc(lpAddress: VOIDPTR, dwSize: sizet, flAllocationType: ULONG, flProtect: ULONG) -> VOIDPTR
extern def VirtualFree(lpAddress: VOIDPTR, dwSize: sizet, dwFreeType: ULONG) -> BOOL
extern def VirtualProtect(lpAddress: VOIDPTR, dwSize: sizet, flNewProtect: ULONG, lpflOldProtect: ULONG | t.CPtr) -> BOOL
extern def VirtualQuery(lpAddress: t.CConst | VOIDPTR, lpBuffer: MEMORY_BASIC_INFORMATION | t.CPtr, dwLength: sizet) -> sizet
extern def VirtualLock(lpAddress: VOIDPTR, dwSize: sizet) -> BOOL
extern def VirtualUnlock(lpAddress: VOIDPTR, dwSize: sizet) -> BOOL
extern def GetProcessHeap() -> HANDLE
extern def HeapCreate(flOptions: ULONG, dwInitialSize: sizet, dwMaximumSize: sizet) -> HANDLE
extern def HeapDestroy(hHeap: HANDLE) -> BOOL
extern def HeapAlloc(hHeap: HANDLE, dwFlags: ULONG, dwBytes: sizet) -> VOIDPTR
extern def HeapReAlloc(hHeap: HANDLE, dwFlags: ULONG, lpMem: VOIDPTR, dwBytes: sizet) -> VOIDPTR
extern def HeapFree(hHeap: HANDLE, dwFlags: ULONG, lpMem: VOIDPTR) -> BOOL
extern def HeapSize(hHeap: HANDLE, dwFlags: ULONG, lpMem: t.CConst | VOIDPTR) -> sizet
extern def HeapValidate(hHeap: HANDLE, dwFlags: ULONG, lpMem: t.CConst | VOIDPTR) -> BOOL
extern def HeapCompact(hHeap: HANDLE, dwFlags: ULONG) -> sizet
extern def GlobalAlloc(uFlags: UINT, dwBytes: sizet) -> VOIDPTR
extern def GlobalFree(hMem: VOIDPTR) -> VOIDPTR
extern def GlobalLock(hMem: VOIDPTR) -> VOIDPTR
extern def GlobalUnlock(hMem: VOIDPTR) -> BOOL
extern def GlobalSize(hMem: VOIDPTR) -> sizet
extern def LocalAlloc(uFlags: UINT, dwBytes: sizet) -> VOIDPTR
extern def LocalFree(hMem: VOIDPTR) -> VOIDPTR
# 跨进程/本进程读内存(memoryapi.h / kernel32.dll)
# BOOL ReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer,
# SIZE_T nSize, SIZE_T *lpNumberOfBytesRead);
# 该导出的签名恰为 dbghelp 的 PREAD_PROCESS_MEMORY_ROUTINE64:StackWalk64 的回调槽
# 要求填这个函数(includes/traceback.vp 在 Install 时用 GetProcAddress 取其地址传入,
# 见 includes/w32/win32dbghelp.vp 的 StackWalk64)。
# 返回 0 = 失败(GetLastError 取原因)。
extern def ReadProcessMemory(hProcess: HANDLE, lpBaseAddress: t.CConst | VOIDPTR, lpBuffer: VOIDPTR, nSize: sizet, lpNumberOfBytesRead: sizet | t.CPtr) -> BOOL