报错信息如下: IDAPython:error executing init.py No moudle named'imp'Refer to the message window to see the full error log 黑体, 报错
因为imp 从 Python 3.4 之后弃用了,所以可以使用 importlib 代替 解决: 首先找到地址文件,即C:\Program Files (x86)\JetBrains\PyCharm 5.0.4\helpers\pycharm\utrunner.py 打开utrunner.py文件 有两个地方需要修改: 1. 第2行,将imp 替换成 importlib #import imp import importlib 2.第42行,注释 imp.load_source,使用 importlib.machinery.SourceFileLoader 加载模块 #module = imp.load_source(moduleName, fileName) module = importlib.machinery.SourceFileLoader(moduleName, fileName).load_module() 这样,再次运行后就不会提示 import imp错误了~
MYpinDD 发表于 2023-11-28 13:29 大佬,问题理解了,但要改哪一个文件呢? https://blog.csdn.net/qq_41553182/article/details/84798961 Python3.4版本以上imp问题解决。
改这三处就可以用Python12了 [i] [i] [Python] 纯文本查看 复制代码def IDAPython_LoadProcMod(path, g, print_error=True): """ 加载处理器模块。 """ pname = g['__name__'] if g and "__name__" in g else '__main__' parent = sys.modules[pname] path_dir, path_fname = os.path.split(path) procmod_name = os.path.splitext(path_fname)[0] procobj = None PY_COMPILE_ERR = None try: spec = importlib.util.spec_from_file_location(procmod_name, path) procmod = importlib.util.module_from_spec(spec) spec.loader.exec_module(procmod) if parent: setattr(parent, procmod_name, procmod) # 从父模块导出属性到处理器模块 parent_attrs = getattr(parent, '__all__', (attr for attr in dir(parent) if not attr.startswith('_'))) for pa in parent_attrs: setattr(procmod, pa, getattr(parent, pa)) # 实例化处理器对象 if getattr(procmod, 'PROCESSOR_ENTRY', None): procobj = procmod.PROCESSOR_ENTRY() except Exception as e: PY_COMPILE_ERR = f"{str(e)}\n{traceback.format_exc()}" if print_error: print(PY_COMPILE_ERR) return PY_COMPILE_ERR, procobj def IDAPython_UnLoadProcMod(script, g, print_error=True): """ 卸载处理器模块。 """ pname = g['__name__'] if g and "__name__" in g else '__main__' parent = sys.modules[pname] script_fname = os.path.split(script)[1] procmod_name = os.path.splitext(script_fname)[0] # 尝试从父模块的属性中移除处理器模块 if hasattr(parent, procmod_name): delattr(parent, procmod_name) # 尝试从 sys.modules 中移除处理器模块 try: sys.modules.pop(procmod_name, None) except Exception as e: print(f"Error unloading module {procmod_name}: {str(e)}") PY_COMPILE_ERR = None return PY_COMPILE_ERR [i]
huangmo1 发表于 2023-12-5 21:55 改这三处就可以用Python12了 大佬,这个方法不行,IDA会报错 IDA has encoountered a problem it is recommended to save your work and restart IDA A mini dump file has been created in IDA路径\xxx.dmp Please send it to