python ctpyes 指针的指针
2018-06-29 本文已影响0人
iosjoker
这玩意太难排版,凑合吧
c 的调用方式如下
void test(char**p, int* len);
char* p = malloc(0x1000)
int len = 0x1000
test(&p, &len)
DebugPrint("size is %d ", len)
DumpHex(p, len)
python 呼叫test
func = CDLL('path').test
functype = CFUNCTYPE(c_void, c_void_p, c_void_p)
func = functype(CDLL('path').test)
data = create_string_buffer(0x1000)
len = c_uint64(0x1000)
func(byref(c_int64(addressof(data))), byref(len)) # 如果32位机器的话data 的地址转化为c_int32
data = data[:len.value] # 将字节码重新组装。 data 本身存储的是c_array_0x1000 . 不是python 的bytes类型。
ctypes pyobjc 这种库自身做了一个桥接。 很多虽然python能访问的类型,并不是python原生的类型。
需要很细心的转化为原生类型后,就大胆的使用吧。