IDA 8.3运行报错,如何解决?

查看 165|回复 9
作者:MYpinDD   
报错信息如下:
IDAPython:error executing init.py
No moudle named'imp'Refer to the message window to see the full error log

黑体, 报错

GrowUpTang   

因为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错误了~
luckkang   


GrowUpTang 发表于 2023-11-28 10:53
因为imp 从 Python 3.4 之后弃用了,所以可以使用 importlib 代替

大神呀,膜拜
MYpinDD
OP
  


GrowUpTang 发表于 2023-11-28 10:53
因为imp 从 Python 3.4 之后弃用了,所以可以使用 importlib 代替

大佬,问题理解了,但要改哪一个文件呢?
freelive   


MYpinDD 发表于 2023-11-28 13:29
大佬,问题理解了,但要改哪一个文件呢?

https://blog.csdn.net/qq_41553182/article/details/84798961
Python3.4版本以上imp问题解决。
MYpinDD
OP
  

本人没有找到导入imp的文件位置,使用了python降版本的方式解决这个问题,python12不支持imp函数,只要将python12降为11即可
huangmo1   

改这三处就可以用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]
MYpinDD
OP
  


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
GrowUpTang   


luckkang 发表于 2023-11-28 11:49
大神呀,膜拜

好些问题,定位到具体报错 百度都有解决答案的
GrowUpTang   


MYpinDD 发表于 2023-12-4 10:57
本人没有找到导入imp的文件位置,使用了python降版本的方式解决这个问题,python12不支持imp函数,只要将py ...

可以的,
您需要登录后才可以回帖 登录 | 立即注册

返回顶部