当前位置: 首页>>代码示例>>Python>>正文


Python idaapi.execute_sync方法代码示例

本文整理汇总了Python中idaapi.execute_sync方法的典型用法代码示例。如果您正苦于以下问题:Python idaapi.execute_sync方法的具体用法?Python idaapi.execute_sync怎么用?Python idaapi.execute_sync使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在idaapi的用法示例。


在下文中一共展示了idaapi.execute_sync方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: safe_generator

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def safe_generator(iterator):

    # Make the sentinel value something that isn't likely to be returned
    # by an API call (and isn't a fixed string that could be inserted into
    # a program to break FIRST maliciously)
    sentinel = '[1st] Sentinel %d' % (random.randint(0, 65535))

    holder = [sentinel] # need a holder, because 'global' sucks

    def trampoline():
        try:
            holder[0] = next(iterator)
        except StopIteration:
            holder[0] = sentinel
        return 1

    while True:
        # See notes above regarding why we use MFF_WRITE here
        idaapi.execute_sync(trampoline, idaapi.MFF_WRITE)
        if holder[0] == sentinel:
            return
        yield holder[0]

#   Main Plug-in Form Class
#------------------------------------------------------------------------------- 
开发者ID:vrtadmin,项目名称:FIRST-plugin-ida,代码行数:27,代码来源:first.py

示例2: __getattribute__

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def __getattribute__(self, name):
        default = '[1st] default'

        if (idaapi.IDA_SDK_VERSION >= 700) and (name in IDAWrapper.mapping):
            name = IDAWrapper.mapping[name]

        val = getattr(idaapi, name, default)
        if val == default:
            val = getattr(idautils, name, default)

        if val == default:
            val = getattr(idc, name, default)

        if val == default:
            msg = 'Unable to find {}'.format(name)
            idaapi.execute_ui_requests((FIRSTUI.Requests.Print(msg),))
            return

        if hasattr(val, '__call__'):
            def call(*args, **kwargs):
                holder = [None] # need a holder, because 'global' sucks

                def trampoline():
                    holder[0] = val(*args, **kwargs)
                    return 1

                # Execute the request using MFF_WRITE, which should be safe for
                # any possible request at the expense of speed.  In my testing,
                # though, it wasn't noticably slower than MFF_FAST.  If this
                # is observed to impact performance, consider creating a list
                # that maps API calls to the most appropriate flag.
                idaapi.execute_sync(trampoline, idaapi.MFF_WRITE)
                return holder[0]
            return call

        else:
            return val 
开发者ID:vrtadmin,项目名称:FIRST-plugin-ida,代码行数:39,代码来源:first.py

示例3: idawrite

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def idawrite(f):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        ff = functools.partial(f, *args, **kwargs)
        return idaapi.execute_sync(ff, idaapi.MFF_WRITE)
    return wrapper 
开发者ID:andreafioraldi,项目名称:IDAngr,代码行数:8,代码来源:ida_debugger.py

示例4: sync_wrapper

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def sync_wrapper(ff,safety_mode):
    """
    Call a function ff with a specific IDA safety_mode.
    """
    logger.debug('sync_wrapper: {}, {}'.format(ff.__name__,safety_mode))

    if safety_mode not in [IDASafety.SAFE_READ,IDASafety.SAFE_WRITE]:
        error_str = 'Invalid safety mode {} over function {}'\
                .format(safety_mode,ff.__name__)
        logger.error(error_str)
        raise IDASyncError(error_str)

    # No safety level is set up:
    res_container = Queue.Queue()

    def runned():
        logger.debug('Inside runned')

        # Make sure that we are not already inside a sync_wrapper:
        if not call_stack.empty():
            last_func_name = call_stack.get()
            error_str = ('Call stack is not empty while calling the '
                'function {} from {}').format(ff.__name__,last_func_name)
            logger.error(error_str)
            raise IDASyncError(error_str)

        call_stack.put((ff.__name__))
        try:
            res_container.put(ff())
        finally:
            call_stack.get()
            logger.debug('Finished runned')

    ret_val = idaapi.execute_sync(runned,safety_mode)
    res = res_container.get()
    return res 
开发者ID:xorpd,项目名称:fcatalog_client,代码行数:38,代码来源:idasync.py

示例5: execute_sync

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def execute_sync(function, sync_type):
    """
    Synchronize with the disassembler for safe database access.

    Modified from https://github.com/vrtadmin/FIRST-plugin-ida
    """

    @functools.wraps(function)
    def wrapper(*args, **kwargs):
        output = [None]

        #
        # this inline function definition is technically what will execute
        # in the context of the main thread. we use this thunk to capture
        # any output the function may want to return to the user.
        #

        def thunk():
            output[0] = function(*args, **kwargs)
            return 1

        if is_mainthread():
            thunk()
        else:
            idaapi.execute_sync(thunk, sync_type)

        # return the output of the synchronized execution
        return output[0]
    return wrapper

#------------------------------------------------------------------------------
# Disassembler Core API (universal)
#------------------------------------------------------------------------------ 
开发者ID:gaasedelen,项目名称:lighthouse,代码行数:35,代码来源:ida_api.py

示例6: execute_read

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def execute_read(function):
        return execute_sync(function, idaapi.MFF_READ) 
开发者ID:gaasedelen,项目名称:lighthouse,代码行数:4,代码来源:ida_api.py

示例7: execute_write

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def execute_write(function):
        return execute_sync(function, idaapi.MFF_WRITE) 
开发者ID:gaasedelen,项目名称:lighthouse,代码行数:4,代码来源:ida_api.py

示例8: execute_ui

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def execute_ui(function):
        return execute_sync(function, idaapi.MFF_FAST)

    #--------------------------------------------------------------------------
    # API Shims
    #-------------------------------------------------------------------------- 
开发者ID:gaasedelen,项目名称:lighthouse,代码行数:8,代码来源:ida_api.py

示例9: __getattribute__

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def __getattribute__(self, name):
        default = '[1st] default'

        if (idaapi.IDA_SDK_VERSION >= 700) and (name in IDAWrapper.mapping):
            name = IDAWrapper.mapping[name]

        val = getattr(idaapi, name, default)
        if val == default:
            val = getattr(idautils, name, default)

        if val == default:
            val = getattr(idc, name, default)

        if val == default:
            msg = 'Unable to find {}'.format(name)
            idaapi.execute_ui_requests((FIRSTUI.Requests.Print(msg),))
            return

        if hasattr(val, '__call__'):
            def call(*args, **kwargs):
                holder = [None] # need a holder, because 'global' sucks

                def trampoline():
                    holder[0] = val(*args, **kwargs)
                    return 1

                idaapi.execute_sync(trampoline, idaapi.MFF_FAST)
                return holder[0]
            return call

        else:
            return val 
开发者ID:Cisco-Talos,项目名称:CASC,代码行数:34,代码来源:casc_plugin.py

示例10: onmsg_safe

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def onmsg_safe(key, data, replay=False):
    def tmp():
        try:
            onmsg(key, data, replay=replay)
        except Exception as e:
            print('error during callback for %s: %s' % (data.get('cmd'), e))
            traceback.print_exc()
    idaapi.execute_sync(tmp, MFF_WRITE) 
开发者ID:lunixbochs,项目名称:revsync,代码行数:10,代码来源:ida_frontend.py

示例11: warning_msgbox

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def warning_msgbox(warning_str):
    def fun(warning_str):
        idc.Warning(warning_str)
    idaapi.execute_sync(partial(fun, warning_str), idaapi.MFF_FAST)


# TODO: not sure if this should always work (race condition? or not with GIL?) 
开发者ID:Riscure,项目名称:DROP-IDA-plugin,代码行数:9,代码来源:helpers.py

示例12: asklong

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def asklong(defval, prompt):
    res = [None]  # Python 2 way to assign outside of a nested function
    def fun(defval, prompt):
        res[0] = idc.AskLong(defval, prompt)
    idaapi.execute_sync(partial(fun, defval, prompt), idaapi.MFF_FAST)
    return res[0]


# TODO: Put these global functions somewhere in a scope? 
开发者ID:Riscure,项目名称:DROP-IDA-plugin,代码行数:11,代码来源:helpers.py

示例13: get_func_codeblocks

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def get_func_codeblocks(f):
    cbs = [None]
    def fun():
        cbs[0] = list(sark.codeblocks(start=f.startEA, end=f.endEA))
    idaapi.execute_sync(fun, idaapi.MFF_READ)
    return cbs[0] 
开发者ID:Riscure,项目名称:DROP-IDA-plugin,代码行数:8,代码来源:helpers.py

示例14: get_current_codeblock

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def get_current_codeblock():
    cb = [None]
    def fun():
        cb[0] = sark.CodeBlock()
    idaapi.execute_sync(fun, idaapi.MFF_READ)
    return cb[0] 
开发者ID:Riscure,项目名称:DROP-IDA-plugin,代码行数:8,代码来源:helpers.py

示例15: reset_block_colors

# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def reset_block_colors(f):
    def fun():
        cbs = sark.codeblocks(start=f.startEA, end=f.endEA)
        for cb in cbs:
            cb.color = 0xFFFFFF
    idaapi.execute_sync(fun, idaapi.MFF_WRITE) 
开发者ID:Riscure,项目名称:DROP-IDA-plugin,代码行数:8,代码来源:helpers.py


注:本文中的idaapi.execute_sync方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。