python ctpyes 指针的指针

这玩意太难排版,凑合吧


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原生的类型。

需要很细心的转化为原生类型后,就大胆的使用吧。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容