Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from ctypes import c_void_p, c_uint, WINFUNCTYPE, CFUNCTYPE, windll, memmove, c_char_p
- GlobalAlloc = windll.kernel32.GlobalAlloc
- GlobalAlloc.argtypes = [c_uint, c_uint]
- GlobalAlloc.restype = c_void_p
- if sys.argv[1] == 'b':
- GlobalLock = windll.kernel32.GlobalLock
- GlobalLock.argtypes = [c_void_p]
- GlobalLock.restype = c_void_p
- elif sys.argv[1] == 'w':
- GlobalLock = WINFUNCTYPE(c_void_p, c_void_p)(windll.kernel32.GlobalLock)
- elif sys.argv[1] == 'c':
- GlobalLock = CFUNCTYPE(c_void_p, c_void_p)(windll.kernel32.GlobalLock)
- else:
- assert False
- hdl = GlobalAlloc(2,100)
- print(hdl)
- buff = GlobalLock(hdl)
- print(buff)
- cbuf = c_char_p(buff)
- memmove(cbuf, c_char_p(b"TestTest"), 9)
- print(cbuf.value)
- TRANS_SCRIPT = """
- ~/tmp $ py -3.7-32 alloc.py b
- 55640068
- 15507016
- b'TestTest'
- ~/tmp $ py -3.7-32 alloc.py c
- 58916868
- 18060520
- b'TestTest'
- ~/tmp $ py -3.7-32 alloc.py w
- 49807364
- 10973464
- b'TestTest'
- ~/tmp $ py -3.8-64 alloc.py b
- 1629464494088
- 1629430083152
- b'TestTest'
- ~/tmp $ py -3.8-64 alloc.py w
- 2574623965192
- Traceback (most recent call last):
- File "_ctypes/callbacks.c", line 237, in 'calling callback function'
- ctypes.ArgumentError: argument 1: <class 'OverflowError'>: int too long to convert
- 2574591640016
- ~/tmp $ py -3.8-64 alloc.py c
- 2903999250440
- Traceback (most recent call last):
- File "_ctypes/callbacks.c", line 237, in 'calling callback function'
- ctypes.ArgumentError: argument 1: <class 'OverflowError'>: int too long to convert
- 2903995302352
- """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement