本文整理汇总了Python中idc.GetFunctionName方法的典型用法代码示例。如果您正苦于以下问题:Python idc.GetFunctionName方法的具体用法?Python idc.GetFunctionName怎么用?Python idc.GetFunctionName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类idc
的用法示例。
在下文中一共展示了idc.GetFunctionName方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: post_analysis_stuff
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def post_analysis_stuff(self, results):
if results.has_formula():
self.action_selector.addItem(self.parent.HIGHLIGHT_CODE)
self.action_selector.addItem(self.parent.GRAPH_DEPENDENCY)
self.formula_area.setText(self.parent.results.formula)
if results.has_values():
self.action_selector.addItem(self.parent.DISASS_UNKNOWN_TARGET)
self.action_selector.setEnabled(True)
self.action_button.setEnabled(True)
report = HTMLReport()
report.add_title("Results", size=3)
report.add_table_header(["address", "assertion", "status", "values"])
addr = make_cell("%x" % results.target)
status = make_cell(results.get_status(), color=results.color, bold=True)
vals = ""
for value in results.values:
flag = idc.GetFlags(value)
typ = self.type_to_string(flag)
vals += "%x type:%s seg:%s fun:%s<br/>" % (value, typ, idc.SegName(value), idc.GetFunctionName(value))
report.add_table_line([addr, make_cell(cgi.escape(results.query)), status, make_cell(vals)])
report.end_table()
data = report.generate()
self.result_area.setHtml(data)
示例2: __call__
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def __call__(self, f):
def wrapped_export_f(*args):
if not globals().has_key("IDP_Hooks") or globals()["IDP_Hooks"] is None:
from idaapi import IDP_Hooks, UI_Hooks
from idc import Name, GetFunctionName, GetStrucIdByName, GetConstName, Warning, SetStrucName, GetStrucName
globals()["IDP_Hooks"] = locals()["IDP_Hooks"]
globals()["UI_Hooks"] = locals()["UI_Hooks"]
globals()["Name"] = locals()["Name"]
globals()["GetFunctionName"] = locals()["GetFunctionName"]
globals()["GetStrucIdByName"] = locals()["GetStrucIdByName"]
globals()["GetConstName"] = locals()["GetConstName"]
globals()["Warning"] = locals()["Warning"]
globals()["SetStrucName"] = locals()["SetStrucName"]
globals()["GetStrucName"] = locals()["GetStrucName"]
return f(*args)
return wrapped_export_f
示例3: get_symbol_name
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def get_symbol_name(from_ea, ea=None, allow_dummy=False):
if ea is None:
ea = from_ea
global _FORCED_NAMES
if ea in _FORCED_NAMES:
return _FORCED_NAMES[ea]
flags = idc.GetFlags(ea)
if not allow_dummy and idaapi.has_dummy_name(flags):
return ""
name = ""
try:
name = name or idc.GetTrueNameEx(from_ea, ea)
except:
pass
try:
name = name or idc.GetFunctionName(ea)
except:
pass
return name
示例4: get_function_name
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def get_function_name(ea):
"""
Get the real function name
"""
# Try to demangle
function_name = idc.Demangle(idc.GetFunctionName(ea), idc.GetLongPrm(idc.INF_SHORT_DN))
if function_name:
function_name = function_name.split("(")[0]
# Function name is not mangled
if not function_name:
function_name = idc.GetFunctionName(ea)
if not function_name:
function_name = idc.Name(ea)
# If we still have no function name, make one up. Format is - 'UNKN_FNC_4120000'
if not function_name:
function_name = "UNKN_FNC_%s" % hex(ea)
return function_name
示例5: get_current_function_strings
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def get_current_function_strings( self ):
addr_in_func = idc.ScreenEA()
curr_func = idc.GetFunctionName(addr_in_func)
funcs = [ addr_in_func ]
if ConfigStingray.SEARCH_RECURSION_MAXLVL > 0:
funcs = find_function_callees( addr_in_func,
ConfigStingray.SEARCH_RECURSION_MAXLVL )
total_strs = []
for func in funcs:
strs = find_function_strings(func)
total_strs += [ s.get_row() for s in strs ]
return total_strs
# ------------------------------------------------------------------------------
示例6: add_method_xref
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def add_method_xref(self,xref):
Message("Adding cross reference to method implementation for %s\n" % GetFunctionName(self.method_pointer))
#TODO: clean this up so it's more clear how we're parsing and patching the instruction
#TODO: handle other potential instructions that could place a method selref into a register
#TODO: sanity check what instruction we're actually working with before blindly deciding
# it's a 7-byte mov instruction
add_dref(xref.frm,self.method_pointer,dr_I|XREF_USER)
#offset is a rip-relative offset that gets added to rip and dereferenced
#when this instruction is executed, rip will be pointing to the next instruction
#meaning it has been incremented by 7 (the length of the mov instruction)
offset=self.method_pointer-xref.frm-self.X86_64_MOV_INSTRUCTION_SIZE
#this replaces mov RSI, &selector with:
# mov RSI, &method
#xref.frm is the address of the mov instruction
#+3 (4th byte of the instruction)
#is where the RIP-relative operand is that
#will get dereferenced as a pointer
PatchDword(xref.frm+3,offset)
return ObjcMethodXref(xref.frm,self.method_pointer,xref.to)
示例7: __init__
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def __init__(self, fun_addr):
super(MyFlowGraph, self).__init__()
self.fun = idaapi.get_func(fun_addr)
self.startEA = self.fun.startEA
self.endEA = self.fun.endEA
for bb in idaapi.FlowChart(self.fun):
self.__setitem__(bb.id, MyBasicBlock(bb))
self._compute_links()
self.edge_map = self.make_graph()
self.shortest_path_map = self.dijkstra(self.edge_map)
self.size = sum([x.size() for x in self.values()])
self.viewer = MyFlowGraphViewer(self, "Extract(%s)" % idc.GetFunctionName(self.startEA))
示例8: set_start_stop
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def set_start_stop(self, ftype):
assert_ida_available()
import idc
import idaapi
import idautils
fun_mapping = {idc.GetFunctionName(x): (idaapi.get_func(x).startEA, idaapi.get_func(x).endEA-1)
for x in idautils.Functions()}
start = idc.BeginEA()
stop = 0
if ftype == PE:
start, stop = fun_mapping["start"]
else:
if not idc.isCode(idc.GetFlags(start)):
if idc.MakeCode(start) == 0:
print "Fail to decode instr !"
idaapi.autoWait()
if idc.GetFunctionName(start) == "":
if idc.MakeFunction(start) == 0:
print "Fail to create function !"
idaapi.autoWait()
fun_mapping = {idc.GetFunctionName(x): (idaapi.get_func(x).startEA, idaapi.get_func(x).endEA-1)
for x in idautils.Functions()}
if "main" in fun_mapping:
start, stop = fun_mapping["main"]
elif "start" in fun_mapping:
if "__libc_start_main" in fun_mapping:
instrs = list(idautils.FuncItems(fun_mapping["start"][0]))
instrs.reverse()
for inst in instrs:
arg1 = idc.GetOperandValue(inst, 0)
if idc.GetMnem(inst) == "push":
start, stop = arg1, fun_mapping["start"][1]
break
else:
start, stop = fun_mapping["start"]
self.config.start, self.config.stop = start, stop
示例9: refresh_trace_view
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def refresh_trace_view(self):
index = self.traces_tab.currentIndex()
try:
table = self.index_map[index]
for i in xrange(table.rowCount()):
addr_item = table.item(i, 1)
addr = int(addr_item.text(), 0)
routine_item = table.item(i, 3)
routine_item.setText(idc.GetFunctionName(addr))
print "Refresh done"
except KeyError:
print "Trace not found"
示例10: target_button_clicked
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def target_button_clicked(self):
if self.radio_addr.isChecked():
self.target_field.setText(hex(idc.here()))
else:
self.target_field.setText(idc.GetFunctionName(idc.here()))
# ================================================================================
# ================================================================================
# ==================== Data structures ==================
示例11: process_routine
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def process_routine(self, rtn_addr, pred_addr=None, rtn_i=1, total_rtn=1):
if rtn_addr not in self.functions_cfg:
self.functions_cfg[rtn_addr] = MyFlowGraph(rtn_addr)
cfg = self.functions_cfg[rtn_addr]
path_to = self.config_to_path_function(cfg)
if pred_addr is None:
candidates = {x for x in idautils.FuncItems(rtn_addr) if idc.GetMnem(x) in cond_jump}
else:
candidates = {pred_addr}
nb_candidates = len(candidates)
self.functions_candidates[rtn_addr] = set()
self.functions_spurious_instrs[rtn_addr] = set()
self.progressbar_loading.reset()
self.progressbar_loading.setMaximum(len(candidates))
name = idc.GetFunctionName(rtn_addr)
self.result_widget.webview.append("\n=> Function:%s\n" % name)
self.log("[result]", "Start processing function: 0x%x" % rtn_addr)
for i, addr in zip(xrange(len(candidates)), candidates):
path = path_to(addr)
res = self.process_addr(rtn_addr, addr, path)
if self.STOP:
return
elif res is None:
continue
dead_br = "/" if res.dead_branch is None else "%x" % res.dead_branch
self.result_widget.webview.append("%x:\t%s\t\tK:%d\tDead:%s" % (addr, to_status_name(res.status), res.k, dead_br))
self.result_widget.webview.verticalScrollBar().setValue(self.result_widget.webview.verticalScrollBar().maximum())
self.loading_stat.setText("Fun: %d/%d Addr: %d/%d" % (rtn_i, total_rtn, i+1, nb_candidates))
self.progressbar_loading.setValue(self.progressbar_loading.value()+1)
self.functions_candidates[rtn_addr].add(addr)
示例12: update_mapping
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def update_mapping(self):
pass
self.fun_mapping = {idc.GetFunctionName(x): (idaapi.get_func(x).startEA, idaapi.get_func(x).endEA-1) for x in
idautils.Functions()}
self.seg_mapping = {idc.SegName(x): (idc.SegStart(x), idc.SegEnd(x)) for x in idautils.Segments()}
示例13: find_dispatch_by_cfg
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def find_dispatch_by_cfg():
"""
Finds the functions in the binary which are not directly called anywhere and counts how many other functions they call,
returing all functions which call > 0 other functions but are not called themselves. As a dispatch function is not normally directly
called but will normally many other functions this is a fairly good way to guess which function it is.
"""
out = []
called = set()
caller = dict()
# Loop through all the functions in the binary
for function_ea in idautils.Functions():
flags = idc.get_func_flags(function_ea)
# skip library functions
if flags & idc.FUNC_LIB:
continue
f_name = idc.GetFunctionName(function_ea)
# For each of the incoming references
for ref_ea in idautils.CodeRefsTo(function_ea, 0):
called.add(f_name)
# Get the name of the referring function
caller_name = idc.GetFunctionName(ref_ea)
if caller_name not in caller.keys():
caller[caller_name] = 1
else:
caller[caller_name] += 1
while True:
if len(caller.keys()) == 0:
break
potential = max(caller, key=caller.get)
if potential not in called:
out.append(potential)
del caller[potential]
return out
示例14: hook_lib_funcs
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def hook_lib_funcs():
from angrdbg import load_project
project = load_project()
for func in idautils.Functions():
flags = idc.GetFunctionFlags(func)
if flags & idc.FUNC_LIB:
name = idc.GetFunctionName(func)
simproc = search_simproc(name)
if simproc is not None:
print name, simproc
project.hook_symbol(func, simproc())
示例15: _GetFunctionName
# 需要导入模块: import idc [as 别名]
# 或者: from idc import GetFunctionName [as 别名]
def _GetFunctionName(func_addr):
"""
Should be a thread safe version of GetFunctionName.
"""
logger.debug('_GetFunctionName')
return str(idc.GetFunctionName(func_addr))