我最近开始编写一些 IDAPython 插件或脚本,而不是使用本机 SDK,但我想我并没有真正弄清楚建议导入哪些模块。通常,我的脚本导入看起来像这样:
import ida_funcs
import ida_kernwin
import ida_lines
import ida_nalt
import ida_name
import ida_segment
import ida_struct
import idaapi
import idautils
import idc
from ida_bytes import *
from PyQt5 import QtCore, QtGui, QtWidgets
我现在才意识到该idaapi模块导入了所有单个模块。例如,我可以将一个动作处理程序定义为
class MyHandler(ida_kernwin.action_handler_t):
但也作为
class MyHandler(idaapi.action_handler_t):
到目前为止,我一直试图找到成员源自的模块,并idaapi在可能的情况下替换为原始模块名称。但是后来我发现BADADDR起源于一个ida_idaapi模块,这个名字感觉很可笑,我想知道我是否一直在做正确的事情。它的来源和文档非常空洞。
- 是否建议使用
idaapi而不是单个模块?为什么idaapi存在?
然后,另一方面,有idc,它似乎提供类似 IDC 的功能,即使使用 C 风格的名称外壳。如果我没记错的话,我读到该模块的用法已被弃用,仅用于快速移植 IDC 脚本;该文件显着地指出
This file is subject to change without any notice.
Future versions of IDA may use other definitions.
- 我应该使用
ida_*/idaapi方法,如果可能,idc完全忽略吗?