免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3023 | 回复: 0
打印 上一主题 下一主题

libfoo.so [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-22 22:35 |只看该作者 |倒序浏览

                里 绝影很羡慕别人把算法做成动态库 带在身边可以一直用
今天本大小姐就来实践一下这一灰常不错滴想法 AC是大三写的 现在忽然又要用 做了一点小改进 以前没带传进状态做参数 这大大的浪费了AC的高智 然后把预处理的函数去掉了 一切内容敏感~
PS.做成动态库还有一大好处就是可以在python里调用 可谓简单又方便 python里没有short类型 如果要写checksum都有些费劲 而且这样一些关键的算法可以由C实现 而捕包都交给pcap一句搞定好了 我怀疑如果有人写个包把libpcap再封装一下 在C里像dpkt/pcap那样用 一定巨受欢迎了~.~
话说方法是这样滴:
先把包含函数的.c编译成.so共享库: gcc -shared -o libfoo.so foo.c
然后在python中import ctypes ,加载函数库: libfoo=ctypes.cdll.LoadLibrary('./libfoo.so')
建树: libfoo.create()
每次ac: next=libfoo.foo(ctypes.create_string_buffer(str),next)keys.txt: 用来存放关键字/特征码(总觉得... 特征码这名儿挺帅的...)
python真是将'一切皆对象'这句圣旨贯彻到家了 而C中却无对象 只能传进字符串 此时字符串作参数成了大问题 于是ctypes脚踏一缕青烟 身批万丈霞光的出现了 拯救了绝望中的我 用其中的create_string_buffer创建一个可读可写的缓冲区 可将str对象转成字符串传入C 虽然官方说法是'创建' 而且我也一度信以为真它是创建在str之外的另外一片地儿 实际上这个缓冲区与str是同一片地方 在C中对其作的修改在python中都有效 ctypes真是个不错滴东东 如果str不是ascii串 可以用str()先强转一下 还有一个c_char_p(好像叫这个) 是用来创建一个只读缓冲区的 用法都差不多
这样 从C到python的问题就都解决了 有一点小不爽的就是类型 python里的类型我还不是很习惯 动不动就一个大LONG 一旦将类型不同的东西一起加 那后果不是一般严重
               
               
               
               
               
               
至少没有子串检索不到的BUG 自恋的觉得还是蛮好用的



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86783/showart_2128392.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP