在IDA的文档中,引用了名为ida_*以及idcidaapiidautils的模块。以前的模块似乎是较低级别的模块。几乎总是说IDA Plugin SDK API wrapper: <some_module>

我对文档和IDAPython有一些具体问题:


这个IDA插件SDK是什么?是IDC中可用的C类API吗? (当我尝试import ida_lines时,IDA说ImportError: No module named ida_lines


#1 楼

一段历史:(又是一个老兄,不知所措)

过去,我们在IDA中没有python,而当一个人想要开发IDA插件时,他必须在其中实现C,并使用在购买IDA许可证时收到的凭据使用hex-ray下载中心提供的SDK。但是,我们确实有IDC。 IDC是IDA古老的,专有的且有些过时的脚本语言,它与C不相关,但是使用类C语法显然很费力。它过去经常使用,但IDAPython几乎完全取代了它。现在看到IDC的唯一原因是IDAPython之前的旧代码。

从那时起,IDAPython被开发(最初是使用上述SDK的插件,然后被hex-rays采纳并成为一部分IDA)。直到最近的IDA 6.95,我们只有一个模块以python公开了IDA的所有C SDK。该模块是idaapiidc正在实现从IDC迁移到IDAPython的更高级别的功能。 idautils实现了一些以前没有的高级功能。这些是粗略的划分,并不完全准确。这里的重点是,有一个(长)python文件公开了所有SDK函数(使用SWIG暴露给python)。

在IDA 6.95中,我们仍然拥有它,但是第一个版本包含多个ida_*模块,将替换广泛的idaapiidaapi仅包括在6.95中,用于向后兼容,应该将其丢弃在IDA 7中。通常,模块的名称(在ida_前缀之后)是定义这些功能的头文件的名称。例如,ida_lines将公开lines.h中定义的函数。

实际答案:


IDA插件SDK是C头文件和二进制库的集合,允许第三方使用提供的API开发IDA插件。可以从下载中心下载它,并且可以在这里找到其文档。
虽然C SDK的文档很好,但IDAPython却不多。在开发IDAPython插件时,我经常会发现浏览SDK很有用,因为函数通常公开给python使用,但是没有像在SDK中那样被记录或描述。基本上大多数功能都是对应的,并且您会在IDAPython和SDK中找到具有相同名称的相同功能(这主要是SWIG / SWIG自动生成的代码)。 IDA的较旧版本,其中ida_*模块尚不存在。通常,使用idaapi代替其他所有模块就可以了。 br />
使用IDA SDK编写C代码并进行编译,并以plwp64二进制作为输出。
编写IDC代码。这是一种体面的脚本语言,类似于语法上的简化C语言。输出将是一个文本文件。在IDAPython流行并将所有权转移到hexrays之前,这是IDA选择的脚本语言。
编写IDAPython代码。这主要是使用从IDA内部运行时可用的附加模块的python,以及注册为插件所需的简单IDA插件接口。


评论


“ IDC正在实现从IDC迁移到IDAPython的更高级别的功能”-这里的(CAPITAL)IDC是什么?您可以编辑原始答案以使其更清晰吗?

– Holmes.Sherlock
17年1月17日在22:41

插件可以用C和Python编写吗?

– Holmes.Sherlock
17年1月17日在22:48



(已编辑)有关什么是IDC,请参见第一段的第二部分。是的,您可以在C中开发IDA插件。但是,插件开发人员似乎更喜欢python,而不是C。

– NirIzr
17年1月17日在22:51

IDC是否与IDA基于C的SDK不同?我问是因为文档说IDC是“类C”(这与“ C”本身的语言不同)。 IDC可以用于编写插件吗?在这种情况下,理论上可以使用以下三种语言之一编写插件:IDC,基于IDA C的SDK,IDAPython。请在上方更新您的答案。它已经如此精确,干净并且指向重点,我只是希望它对将来的读者更好。

– Holmes.Sherlock
17年1月17日23:01

查看其他编辑。

– NirIzr
17年1月17日在23:29