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范例。
变量范例
整数
def integer():
var1=1
var2=437593479587349875983475987349587324895
var3=-1
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