ToB企服应用市场:ToB评测及商务社交产业平台

标题: Cython二进制逆向系列(二)变量与数据结构 [打印本页]

作者: 篮之新喜    时间: 2024-12-10 20:54
标题: Cython二进制逆向系列(二)变量与数据结构
Cython二进制逆向系列(二)变量与数据结构

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


变量范例

整数
  1. def integer():
  2.         var1=1
  3.         var2=437593479587349875983475987349587324895
  4.         var3=-1
  5. integer()
复制代码
  编译后在c文件的2269行我们可以看到函数的实现:
[code]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             #




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4