- 献词
- 致谢
- 前言
- 第一部分 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.7 编写处理器模块
在 IDA 5.7 中引入的使用 IDA 的脚本语言创建处理器模块的功能在一定程度上简化了处理器模块的创建过程。最起码,它完全取消了模块创建过程的构建阶段。Hex-Rays 的 Elias Bachaalany 在 Hex 博客1 上的一篇文章中介绍了脚本化处理器模块,而且 IDA 的 EFI 字节码处理器模块也通过 Python 脚本来实现(参见/procs/ebc.py )。请注意,虽然 Hex 博客文章提供了有用的背景,但用于编写处理器模块的具体 API 已有所变化。开始编写你自己的处理器模块脚本的最佳方法是,使用 SDK 附带的模板模块(参见/module/script/proctemplate.py)。除其他内容外,这个模板枚举了 Python 处理器模块所需的所有字段。
1. 参见 See http://www.hexblog.com /?p=116 。
脚本化处理器模块利用了前面讨论的几乎所有元素。了解这些元素将有助于你顺利过渡到脚本化模块。此外,在开发你自己的模块时,你可以用 IDA (截止 IDA 6.1 )当前附带的 3 个处理器模块作为范例。与 SDK 附带的 C++ 示例(涵盖几个文件并要求你正确配置构建环境)相比,这两个模块的结构更易于理解。
从宏观上看,以 Python 实现处理器模块需要完成下面两个任务。
定义子类
idaapi.processor_t
,以实现所有所需的处理器模块函数,如emu
、ana
、out
和outop
。定义返回处理器类的一个实例的
PROCESSOR_ENTRY
函数(而非子类的成员)。
下面的代码列出了所需的一些元素:
from idaapi import * class demo_processor_t(idaapi.processor_t): # Initialize required processor data fields including id and # assembler and many others. The assembler field is a dictionary # containing keys for all of the fields of an asm_t. A list of # instructions named instruc is also required. Each item in the list # is a two-element dictionary containing name and feature keys. # Also define functions required by processor_t such as those below. def ana(self): # analyzer behavior def emu(self): # emulator behavior def out(self): # outputter behavior def outop(self): # outop behavior # define the processor entry point function which instantiates # and returns an instance of processor_t def PROCESSOR_ENTRY(): return demo_processor_t()
与上面的脚本相比,有效的 Python 处理器模块包含更多字段和函数,基本上与任何以 C++ 实现的处理器模块所需的字段相对应。编写脚本后,将其复制到/procs 目录,即可安装模块。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论