篮之新喜 发表于 2024-12-10 20:54:41

Cython二进制逆向系列(二)变量与数据结构

Cython二进制逆向系列(二)变量与数据结构

  在这篇文章里,我们会讨论Cython是如何存储变量(整数、小数、字符串、布尔值)以及数据结构(列表、元组、集合、字典)。Cython 对变量存储的方式与 Python 相似,但在 Cython 中,可以使用 C 范例的变量来明显进步性能。此外,由于Cython仍旧依托于Python的捏造机运行,因此Cython编译后的文件在底层仍旧离不开对捏造机接口的调用。在逆向时,我们可以通过调用的接口函数来判断变量的范例。
  Cython编译规则中会先把硬编码中的数字先解析了一遍,我们写的普通整数识别为long范例,小数则是识别成了double范例(无论长短),太长的整数识别为PyObject范例,字符串也是PyObject范例,布尔值是int范例,列表、元组、字典都是PyObject范例。


变量范例

整数

def integer():
        var1=1
        var2=437593479587349875983475987349587324895
        var3=-1
integer()  编译后在c文件的2269行我们可以看到函数的实现:
static PyObject *__pyx_pf_4test_integer(CYTHON_UNUSED PyObject *__pyx_self) {CYTHON_UNUSED long __pyx_v_var1;CYTHON_UNUSED PyObject *__pyx_v_var2 = NULL;CYTHON_UNUSED long __pyx_v_var3;PyObject *__pyx_r = NULL;__Pyx_RefNannyDeclarations__Pyx_RefNannySetupContext("integer", 1);/* "test.py":2 * def integer(): *         var1=1             #
页: [1]
查看完整版本: Cython二进制逆向系列(二)变量与数据结构