参考资料1:https://blog.xhyeax.com/2021/12/04/idapython-scripts-upgrade/
参考资料2:https://hex-rays.com//products/ida/support/idapython_docs/
参考资料3:https://stackoverflow.com/questions/11941817/how-can-i-avoid-runtimeerror-dictionary-changed-size-during-iteration-error
这通常是由于:旧版本的 IDA python script 是在 IDA6+python2 时代编写的,而你现在在使用 IDA7+python3 执行它
首先要做的事情是:把旧版本 idapython 脚本的书写格式改为 python3 格式的
随后,IDA6 ----> IDA7 的过程中,idc
模块的大量 API 被改名了,我们需要把这些 API 的名字改到 IDA7 的 API。相关内容参考这篇博客:https://blog.xhyeax.com/2021/12/04/idapython-scripts-upgrade/
IDA6 和 IDA7 的 API 名字对应关系可以参考 ida pro 7.6\python\3\idc_bc695.py
,也可以直接把这里的内容拷贝到你的脚本里,让脚本 自行替换 API。
除了 idc_bc695.py 里的内容外,还有一些其它 API 的名字也被修改了,比如 “NextHead, PrevHead” 被改成了 “next_head, prev_head”,具体参考这个 API 文档:https://hex-rays.com//products/ida/support/idapython_docs/
最后就是,python2 和 python3 在字典操作方面有一些出入,比如 python2 允许在迭代过程中对字典的大小进行修改,而 python3 不允许,如果 IDApython script 出现了这种操作,我们也要进行相应的修改。具体参考:https://stackoverflow.com/questions/11941817/how-can-i-avoid-runtimeerror-dictionary-changed-size-during-iteration-error