layout: post comments: true title: 基于「木兰」逆向工程用 pyinstaller 生成可执行文件 description: date: 2020-02-19 00:05:00 -0700
对单个文件:
pyinstaller -F print.py
生成dist\print.exe
,可以拷贝到其他路径,正确运行。参考文档。
对于printo
模块(可运行python -m printo
),运行:
pyinstaller -F printo\__main__.py
生成__main__.exe
文件,也可单独运行
必须首先安装模块 rply 和 codegen。再运行:
> pyinstaller -F --hiddenimport rply --hiddenimport codegen ulang\__main__.py
【中略】
26365 INFO: Appending archive to EXE D:\study\mulan\mulan_reverse\dist\__main__.exe
26380 INFO: Building EXE from EXE-00.toc completed successfully.
但,运行积累的测试用例未能完全通过:
TypeError: required field "lineno" missing from stmt
通过: func_no_params.mulan
TypeError: object of type 'int' has no len()
通过: func_params.mulan
通过: break.mulan
通过: continue.mulan
通过: using_mulan_module.mulan
通过: using_python_module.mulan
通过: if.mulan
通过: if_else.mulan
通过: stmt_if_true.mulan
通过: stmt_if_false.mulan
通过: while.mulan
通过: loop.mulan
===================
失败: type.mulan 期望:b'Mulan' 实际:b''
失败: range.mulan 期望:b'012123-113' 实际:b'012123'
失败: for_colon.mulan 期望:b'6' 实际:b'0'
失败: for_in.mulan 期望:b'10' 实际:b'1'
失败: stmt_for_in.mulan 期望:b'3' 实际:b'0'
失败: stmt_for_colon.mulan 期望:b'5' 实际:b'0'
失败: if_elif.mulan 期望:b'1' 实际:b''
失败: if_elif_else.mulan 期望:b'3' 实际:b''
先用的并非原始的逆向工程,再试了我修改之前的版本,仍然同样结果。
待深究。
不过至少构建过程初步走通。
也许要自己逆向一下。
相关内容在:MulanRevive/bounty