首页
社区
课程
招聘
[原创]C/C++语言编写python扩展模块解析python脚本多参数
发表于: 2021-8-6 18:02 12647

[原创]C/C++语言编写python扩展模块解析python脚本多参数

2021-8-6 18:02
12647

使用C/C++语言编写python扩展模块详细内容大致如下:
1.新建一个dll文件,导出一个C语言接口函数:PyInit_XXX,XXX为动态库模块名称
2.在上述导出函数中使用PyModule_Create函数创建结构体(实际中稍微复杂一点)
3.形式如:{ "alalysisTuple", PyAlalysisTuple, METH_VARARGS, "" }, //可变参数,当在python脚本中调用函数alalysisTuple,即可映射到自己写的C语言函数PyAlalysisTuple
4.windows下将dll后缀改为pyd,放到py脚本可以识别的路径
5.在python脚本中使用语句 from dllname import alalysisTuple,之后即可在脚本中调用alalysisTuple函数
动态库中PyAlalysisTuple函数如下:


调用MyPyArg_ParseTuple函数,即可解析不定个数的参数。

背景:使用C/C++语言编写python扩展模块,python脚本中传入元组参数,元组中包含不定个数的字符串。
背景:使用C/C++语言编写python扩展模块,python脚本中传入元组参数,元组中包含不定个数的字符串。
如果size更大,那就需要写更多的else if函数,此时可以使用一个临时的办法,例如限制size的大小,如设置size最大为16,那么声明16个变量,或者一个char* str[16]数组,然后调用PyArg_ParseTuple函数,传入的format中有16个s,后面再传入16个字符串指针的地址,可以作为临时方法,如果size大于16,那么就提示参数过多,不合法。
 
还有一个方案,可以使用一个裸汇编函数去封装PyArg_ParseTuple,在汇编函数中展开栈参数调用PyArg_ParseTuple,PyAlalysisTuple如下:
如果size更大,那就需要写更多的else if函数,此时可以使用一个临时的办法,例如限制size的大小,如设置size最大为16,那么声明16个变量,或者一个char* str[16]数组,然后调用PyArg_ParseTuple函数,传入的format中有16个s,后面再传入16个字符串指针的地址,可以作为临时方法,如果size大于16,那么就提示参数过多,不合法。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 2106
活跃值: (2639)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
2
pybind11很方便
2021-8-7 11:19
0
雪    币: 3763
活跃值: (5926)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
evilbeast pybind11很方便
谢谢 我看一下  学习下
2021-8-7 16:41
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
naked的函数可以ret的吗
2021-8-14 11:23
0
雪    币: 3763
活跃值: (5926)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
5
萌克力 naked的函数可以ret的吗
可以ret  上面是RET 0x10 是恢复16字节的空间 有4个参数  正常函数都有ret naked函数就是需要自己写函数头 尾 ,函数头包括push ebp;mov ebp,esp   函数尾有mov esp,ebp;pop ebp  然后手动ret   不ret程序就无法返回到调用函数中,相当于在调用函数 jmp到naked函数中,不会返回了
2021-8-15 13:26
0
游客
登录 | 注册 方可回帖
返回
//