lua ffi.string 之殇

缘起

使用ffi给lua包一个rsa算法, 刚刚学习ffi,连文档都没仔细看过,当返回加密结果时,如果直接返回CDATA,则解密没有问题,如果转为lua string(使用ffi.string) ,则后续无法解密

调试

  1. 直接在lua中调试基本无法凑效
  2. 重新编译openssl的libcrypt库,加入调试信息,先是祭出gdb,调的晕乎乎的;然后,则可以地方修改C代码,打印调试信息
  3. 发现,使用ffi.string 和不使用ffi.string 的差别在于,字符串的前面一部分是相同的,后面一部分是不同的,出于对零字节的敏感,发现是从零字节之后开始不同的;猜测ffi.string()或许可以有第二个参数(悲催,因为给一个参数也好使过,所以再没看过文档)
  4. 查ffi的文档,发现ffi.string()是有第二个参数的,添加第二个参数,问题解决
  5. 这个花费了我大约2天的时间,欲哭无泪

结论

  1. ffi.string(cdata, len) 是有第二个参数的,如果不写第二个参数,则从第一个零字节处截断
  2. 学习要循序渐进,文档是要看的

成果

 

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据