返回介绍

19.7 编写处理器模块

发布于 2024-10-11 21:05:48 字数 1893 浏览 0 评论 0 收藏 0

在 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 ,以实现所有所需的处理器模块函数,如 emuanaoutoutop

  • 定义返回处理器类的一个实例的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文