返回介绍

第 16 章 IDA 软件开发工具包

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

在本书中,我们经常使用“IDA 这样做”和“IDA 那样做”之类的短语。虽然 IDA 确实能够帮助我们做大量工作,但是,确切地说,它的智能要归功于它依赖的各种模块。例如处理器模块,它负责做出分析阶段的各种决策。因此,你可以说,IDA 不过和它所依赖的处理器模块一样聪明。当然,Hex-Rays 付出了巨大的努力,以确保它的处理器模块始终具有强大的功能。对于一般用户而言,IDA 的模块体系结构完全隐藏在它的用户界面之下。

有时候,你可能需要比 IDC 脚本语言更加强大的功能,不管是为了提高性能,还是为了完成 IDC 无法完成的任务。这时,你需要使用 IDA 的 SDK (软件开发工具包)构建你自己的编译模块,以供 IDA 使用。

说明  IDC 脚本引擎以 IDA 的 SDK 为基础。所有 IDC 函数最终都需要调用一个或几个 SDK 函数;由后者完成具体的工作。有时你可以用 IDC 完成一项任务,也可以使用 SDK 完成相同的任务,但这句话倒过来说却不一定正确。与 IDC 相比,SDK 的功能更加强大;而且许多 SDK 操作都没有对应的 IDC 操作。

SDK 以 C++ 库和连接这些库所需的头文件的形式呈现 IDA 的内部编程接口。使用 SDK ,你可以创建加载器模块以处理新的文件格式,创建处理器模块以反汇编新的 CPU 指令集,或者创建用于替代脚本的已编译的、更加强大的插件模块。

附加说明

在使用 C++ 时,你当然会访问大量 C++ 库,包括操作系统的本地 API。利用这些库,你可以将大量复杂的功能合并到你构建的模块中。但是,在选择以这种方式合并的功能时,你需要特别小心,因为这样做可能会使 IDA 变得不够稳定。最典型的例子是,IDA 是一款单线程应用程序,它没有做出任何努力来同步对低级数据库结构的访问,SDK 也不提供完成这类任务的工具。对于 IDA 5.5 之前的版本,你绝不能创建其他同时访问数据库的线程。对于版本 5.5 及更高版本,你可以创建其他线程,但对 SDK 函数的任何调用都应使用在 kernwin.hpp 中介绍的 exec_request_texecute_sync 函数进行排队。你应该认识到,你执行的任何阻塞操作1 都会使 IDA 停止响应,直到该操作完成。

1. 阻塞操作是使程序在等待一项操作完成时停止运行的操作。

在本章中,我们将介绍 SDK 的一些核心功能。你会发现,在创建插件、加载器模块或处理器模块时,这些功能很有用。因为我们将在后面 3 章中分别介绍这些模块,因此,在本章的例子中,我们将不介绍它们的应用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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