11月 172014
 

缘起

使用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. 学习要循序渐进,文档是要看的

成果

 

 Posted by at 下午 4:29

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

(required)

(required)

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