本文整理汇总了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
#-------------------------------------------------------------------------------
示例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
示例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
示例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
示例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)
#------------------------------------------------------------------------------
示例6: execute_read
# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def execute_read(function):
return execute_sync(function, idaapi.MFF_READ)
示例7: execute_write
# 需要导入模块: import idaapi [as 别名]
# 或者: from idaapi import execute_sync [as 别名]
def execute_write(function):
return execute_sync(function, idaapi.MFF_WRITE)
示例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
#--------------------------------------------------------------------------
示例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
示例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)
示例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?)
示例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?
示例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]
示例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]
示例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)