栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 面试经验 > 面试问答

用Cython生成的可执行文件真的没有源代码吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Cython生成的可执行文件真的没有源代码吗?

该代码位于exe旁边的原始pyx文件中。删除/不与您的exe一起分发此pyx文件。


查看生成的C代码时,您将看到可执行文件显示错误消息的原因:

对于出现的错误,Cython将发出类似于以下内容的代码:

__PYX_ERR(0, 11, __pyx_L3_error)

其中

__PYX_ERR
在宏定义为:

#define __PYX_ERR(f_index, lineno, Ln_error) {   __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; }

并且该变量

__pyx_f
定义为

static const char *__pyx_f[] = {  "test.pyx",  "stringsource",};

基本上

__pyx_f[0]
告诉可以在哪里找到原始代码。现在,当引发异常时,(嵌入式)Python解释器将查找原始的pyx文件并找到相应的代码(可以
__Pyx_AddTraceback
在出现错误时在其中查找该代码)。

一旦这个pyx文件不存在,原始的源代码将不再为Python解释器/其他任何人所了解。但是,错误跟踪将仍然显示函数的名称和行号,但不再显示任何代码段。

生成的可执行文件(或扩展名,如果有人创建的话,则扩展名)不包含任何字节码(如pyc文件中的内容),并且无法使用以下工具反编译

uncompyle
:将py文件翻译成Python操作码后生成字节码,然后在一个巨大的循环
ceval.c
。但是对于内置/
cython模块,则不需要字节码,因为生成的代码直接使用Python的C-API,从而消除了对操作码进行评估的需要-
这些模块跳过了解释,这是它们变得更快的原因。因此,可执行文件中将没有字节码。

但是,有一个重要的注意事项:应该检查链接器是否不包含调试信息(因此,可以在其中找到pyx文件内容的C代码作为注释)。带

/Z7
选项的MSVC就是这样的示例。


但是,可以将生成的可执行文件反汇编到汇编器中,然后可以对生成的C代码进行逆向工程-
因此,虽然cythonizing可以使代码难以理解,但它不是隐藏密钥或安全算法的正确工具。



转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/640035.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号