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

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

2021-8-6 18:02
8619
1
背景:使用C/C++语言编写python扩展模块,python脚本中传入元组参数,元组中包含不定个数的字符串。

使用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函数如下:

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

1
裸函数如下:


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


【公告】【iPhone 13、ipad、iWatch】11月15日中午12:00,看雪·众安 2021 KCTF秋季赛 正式开赛【攻击篇】!!!文末有惊喜~

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