文章预览
众所周知,Python 类题目最难的一类是使用 cython (https://github.com/cython/cython) 工具将 Python 代码转成 C 代码并编译成二进制库。此类题目比单纯使用 Python/C API 编写 C 代码编译成二进制库的方式更加复杂,cython 工具作为一类通用工具,为了提高稳健性,其在转换时会对 Python 代码做额外处理(包括对引用计数的调整),从而干扰我们的逆向。当然,也正是因为它是通用工具,其整体框架和对类似 Python 字节码的处理也有一定规律,当我们熟悉这个规律以后,手撕 cython 二进制库就非常轻松了。 初探 cython 先用最经典的 Hello world 做例子,保存为 hello_world.py : print( "Hello, World!" ) 然后调用 cython 转成 C 并编译: cythonize -i hello_world.py 然后我们可以看到一个 hello_world.c 生成在同一目录中,可以看到这个 c 文件足足有4155行……! 足以证明其框架代码和
………………………………