【问题标题】:Ida Pro 6.9 crashIda Pro 6.9 崩溃
【发布时间】:2016-10-26 01:14:06
【问题描述】:

我正在为 Ida(在 python 中)编写一个使用 Etcd 远程键值存储系统的插件。我的问题是当我尝试锁定服务器时

        lock = etcd.Lock(self.client, 'ida_lock')
        Should timeout after 30 seconds. Hopefully that is enough.
        lock.acquire(blocking=True,lock_ttl=None,timeout=30)
        if lock.is_acquired:

            data,idc_file = self.get_idc_data()

            if os.path.isfile('expendable.idc'):
                self.client.write('/fREd/' + self.md5 + '/all/', idc_file, prevValue = open('expendable.idc','r').readlines())
            else:
                self.client.write('/fREd/' + self.md5 + '/all/', idc_file)
        lock.release()

就像这样,Ida 冻结了,我想知道是否有人对为什么会发生这种情况或如何解决它有任何见解。

因此,作为参考,包含此方法的方法是通过键盘快捷键调用的

idaapi.add_hotkey('Ctrl-.', self.push_data)

毫无疑问,是锁导致了问题。

你可以在https://github.com/jplana/python-etcd查看python-etcd源码

【问题讨论】:

    标签: python ida etcd


    【解决方案1】:

    目录/_locks/ida_lock下已经存在key。

    列出/_locks/ida_lock下的文件:

    etcdctl ls /_locks/ida_lock
    

    要摆脱这种情况,请运行:

    etcdctl rm /_locks/ida_lock --dir --recursive
    

    为避免这种情况,您可以在finally 块中运行lock.release(),就像不释放一样,/_locks/ida_lock 下会保留一个文件。
    此外,您可以添加一些日志配置(可以参考here),以便在处理此类问题时进行更多挖掘。

    【讨论】:

    • 对不起,我不太明白。是否暗示我对锁的使用不正确?如果有,请详细说明。
    • 几乎是对的,但有些事情需要您注意。如果'self.client.write'在你的代码中抛出异常(只是一个'if'),你的代码将不会调用lock.release(),这将在etcd中留下一个键。那么下次你想锁定时,它只会等待......超时参数似乎在这种情况下不起作用......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2012-11-09
    相关资源
    最近更新 更多