- 献词
- 致谢
- 前言
- 第一部分 IDA 简介
- 第 1 章 反汇编简介
- 第 2 章 逆向与反汇编工具
- 第 3 章 IDA Pro 背景知识
- 第二部分 IDA 基本用法
- 第 4 章 IDA 入门
- 第 5 章 IDA 数据显示窗口
- 第 6 章 反汇编导航
- 第 7 章 反汇编操作
- 第 8 章 数据类型与数据结构
- 第 9 章 交叉引用与绘图功能
- 第 10 章 IDA 的多种面孔
- 第三部分 IDA 高级应用
- 第 11 章 定制 IDA
- 第 12 章 使用 FLIRT 签名来识别库
- 第 13 章 扩展 IDA 的知识
- 第 14 章 修补二进制文件及其他 IDA 限制
- 第四部分 扩展 IDA 的功能
- 第 15 章 编写 IDA 脚本
- 第 16 章 IDA 软件开发工具包
- 第 17 章 IDA 插件体系结构
- 第 18 章 二进制文件与 IDA 加载器模块
- 第 19 章 IDA 处理器模块
- 第五部分 实际应用
- 第 20 章 编译器变体
- 第 21 章 模糊代码分析
- 第 22 章 漏洞分析
- 第 23 章 实用 IDA 插件
- 第六部分 IDA 调试器
- 第 24 章 IDA 调试器
- 第 25 章 反汇编器/ 调试器集成
- 第 26 章 其他调试功能
- 附录 A 使用 IDA 免费版本 5.0
- 附录 B IDC/SDK 交叉引用
19.1 Python 字节码
Python1 是一种面向对象的带注释的编程语言。通常,Python 以类似于 Perl 的方式编写脚本。Python 源文件常使用.py 扩展名保存。任何时候执行 Python 脚本,Python 解释器将把源代码编译成名为 Python 字节码2 的内部表示形式。这种字节码最终将由一个虚拟机解释。在某种程度上,整个过程类似于将 Java 源代码编译成 Java 字节码,后者最终由 Java 虚拟机执行。它们之间的主要不同在于,Java 用户必须将它们的 Java 源代码显式编译成 Java 字节码,而每次用户选择执行一段 Python 脚本时 Python 源代码必须隐式转换成字节码。
1. 参见 http://www.python.org/ 。
2. 参见 http://docs.python.org/library/dis.html#bytecodes 了解 Python 字节码指令及其意义。请参见 Python 源代码发行版中的 opcode.h 文件了解字节码助记符及其对应的操作码。
为了避免重复将 Python 源代码转换成 Python 字节码,Python 解释器可以将 Python 源文件的字节码形式保存在一个.pyc 文件中,并在随后的执行过程中加载这个文件,从而节省在转换 Python 源代码上花费的时间。通常,用户并不会显式创建.pyc 文件。相反,Python 解释器会自动为由另一个 Python 源模块导入的任何 Python 源模块创建.pyc 文件。理论上,这些模块会不断被重复利用,因此,如果你能够立即获得这些模块的字节码形式,将能够节省大量时间。Python 字节码(.pyc )文件基本上等同于 Java 的.class 文件。
如果存在与源代码对应的字节码文件,Python 解释器就不需要使用源代码。因此,我们能够以字节码而非源代码的形式发布一个 Python 项目的某些部分。这时,就像处理其他发行版的二进制软件那样,逆向工程字节码文件以了解它们的作用,可能会有所用处。这也是示例 Python 处理器模块的主要用途——提供一个有助于逆向工程 Python 字节码的工具。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论