seb*_*lba 21 python ctypes pywin32
出于低级目的,我需要从任意地址构造一个ctypes指针,以整数形式给出.例如:
INTP = ctypes.POINTER(ctypes.c_int)
p = INTP(0x12345678) # i *know* this is the address
Run Code Online (Sandbox Code Playgroud)
但所有这些尝试都会导致
TypeError: expected c_long instead of int
Run Code Online (Sandbox Code Playgroud)
我能做些什么来克服这个问题吗?如果有人想知道我为什么需要这个,那么就是为了OVERLAPPED从一个win32file.PyOVERLAPPED用于集成ctypes暴露的函数和win32file包装的API 来提取结构.
谢谢,
-Tomer
sam*_*ias 33
你可以用ctypes.cast(addr, type).我将扩展您的示例以通过已知对象获取地址,以演示:
INTP = ctypes.POINTER(ctypes.c_int)
num = ctypes.c_int(42)
addr = ctypes.addressof(num)
print 'address:', addr, type(addr)
ptr = ctypes.cast(addr, INTP)
print 'pointer:', ptr
print 'value:', ptr[0]
Run Code Online (Sandbox Code Playgroud)
输出:
address: 4301122528 <type 'int'>
pointer: <__main__.LP_c_int object at 0x1005decb0>
value: 42
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9550 次 |
| 最近记录: |