从命令行反汇编 Python 脚本?
Disassemble a Python script from the command line?
在 gcc 中,您可以在代码编译成程序集后使用 -S 停止编译。 Python/bytecode 有类似的功能吗?我知道这样的方法:
import dis
x = compile('print(1)', '', 'eval')
dis.dis(x)
打印:
1 0 LOAD_NAME 0 (print)
2 LOAD_CONST 0 (1)
4 CALL_FUNCTION 1
6 RETURN_VALUE
但我正在考虑更多类似的东西:
> python3 -{SOME FLAG HERE} output my_script.py
以可读格式输出包含脚本字节码的文件。
如果您要查找的是 反汇编程序 的输出,那么您可以 运行 将模块作为脚本:
python -m dis myscript.py
并且反汇编程序的输出将打印到标准输出。您可以使用适当的 shell 工具将其重定向到某个文件。例如。在 *nix:
python -m dis myscript.py > output.txt
注意:据我所知,dis
的这种用法没有记录,检查 source code 它可能不是模块的稳定部分,但它 是否适用于当前的 CPython。
在 gcc 中,您可以在代码编译成程序集后使用 -S 停止编译。 Python/bytecode 有类似的功能吗?我知道这样的方法:
import dis
x = compile('print(1)', '', 'eval')
dis.dis(x)
打印:
1 0 LOAD_NAME 0 (print)
2 LOAD_CONST 0 (1)
4 CALL_FUNCTION 1
6 RETURN_VALUE
但我正在考虑更多类似的东西:
> python3 -{SOME FLAG HERE} output my_script.py
以可读格式输出包含脚本字节码的文件。
如果您要查找的是 反汇编程序 的输出,那么您可以 运行 将模块作为脚本:
python -m dis myscript.py
并且反汇编程序的输出将打印到标准输出。您可以使用适当的 shell 工具将其重定向到某个文件。例如。在 *nix:
python -m dis myscript.py > output.txt
注意:据我所知,dis
的这种用法没有记录,检查 source code 它可能不是模块的稳定部分,但它 是否适用于当前的 CPython。