def test_alloc_free(): map_size = 65536 data = alloc(map_size) for i in range(0, map_size, 171): data[i] = chr(i & 0xff) for i in range(0, map_size, 171): assert data[i] == chr(i & 0xff) free(data, map_size)
def test_alloc_free(): map_size = 65536 data = alloc(map_size) for i in range(0, map_size, 171): data[i] = chr(i & 0xff) for i in range(0, map_size, 171): assert data[i] == chr(i & 0xff) madvise_free(data, map_size) free(data, map_size)
def cpu_info(instr): data = alloc(4096) pos = 0 for c in instr: data[pos] = c pos += 1 fnptr = rffi.cast(lltype.Ptr(lltype.FuncType([], lltype.Signed)), data) code = fnptr() free(data, 4096) return code
def cpu_info(instr): data = alloc(4096) pos = 0 for c in instr: data[pos] = c pos += 1 fnptr = rffi.cast(CPU_ID_FUNC_PTR, data) code = fnptr() free(data, 4096) return code
def detect_x32_mode(): data = alloc(4096) pos = 0 # 32-bit 64-bit / x32 for c in ("\x48" # DEC EAX "\xB8\xC8\x00\x00\x00"# MOV EAX, 200 MOV RAX, 0x40404040000000C8 "\x40\x40\x40\x40" # 4x INC EAX "\xC3"): # RET RET data[pos] = c pos += 1 fnptr = rffi.cast(lltype.Ptr(lltype.FuncType([], lltype.Signed)), data) code = fnptr() free(data, 4096) assert code in (200, 204, 0x40404040000000C8) return code == 200
def detect_sse2(): data = alloc(4096) pos = 0 for c in ("\xB8\x01\x00\x00\x00" # MOV EAX, 1 "\x53" # PUSH EBX "\x0F\xA2" # CPUID "\x5B" # POP EBX "\x92" # XCHG EAX, EDX "\xC3"): # RET data[pos] = c pos += 1 fnptr = rffi.cast(lltype.Ptr(lltype.FuncType([], lltype.Signed)), data) code = fnptr() free(data, 4096) return bool(code & (1<<25)) and bool(code & (1<<26))
def detect_sse2(): data = alloc(4096) pos = 0 for c in ("\xB8\x01\x00\x00\x00" # MOV EAX, 1 "\x53" # PUSH EBX "\x0F\xA2" # CPUID "\x5B" # POP EBX "\x92" # XCHG EAX, EDX "\xC3"): # RET data[pos] = c pos += 1 fnptr = rffi.cast(lltype.Ptr(lltype.FuncType([], lltype.Signed)), data) code = fnptr() free(data, 4096) return bool(code & (1 << 25)) and bool(code & (1 << 26))
def detect_x32_mode(): data = alloc(4096) pos = 0 # 32-bit 64-bit / x32 for c in ( "\x48" # DEC EAX "\xB8\xC8\x00\x00\x00" # MOV EAX, 200 MOV RAX, 0x40404040000000C8 "\x40\x40\x40\x40" # 4x INC EAX "\xC3"): # RET RET data[pos] = c pos += 1 fnptr = rffi.cast(lltype.Ptr(lltype.FuncType([], lltype.Signed)), data) code = fnptr() free(data, 4096) assert code in (200, 204, 0x40404040000000C8) return code == 200
def _delete(self): "NOT_RPYTHON" if self._allocated: for data, size in self._allocated: rmmap.free(data, size) self._allocated = None
def entry_point(argv): one = alloc(1024) free(one, 1024) return 0