0x00 traversal commun
fonction Traversal
for fn in idautils.Functions():
print hex(fn), idc.get_func_name(fn)
En outre, il peut également être utilisé idc.get_next_func(ea)
et idc.get_prev_func(ea)
obtenir la fonction suivante et précédente
bloc traversal
ida_gdl.py définit deux classes ordinogramme et BasicBlock
idaapi.FlowChart()
peuvent être générés pour une fonction ou d' une région de la figure
traversée du bloc de fonction
f_blocks = idaapi.FlowChart(idaapi.get_func(fn), flags=idaapi.FC_PREDS)
for block in f_blocks:
print hex(block.start_ea)
Qui spécifient FC_PREDS
, peut être utilisé pour afficher le bloc de noeud prédécesseur de
déplacement noeud successeur de bloc
for succ in block.succs():
print hex(succ.start_ea)
Traversant noeud de précurseur de bloc
for pred in block.preds():
print hex(pred.start_ea)
Si preds () retourne un ensemble vide, vérifiez si les drapeaux sont mis à FC_PREDS, des informations plus détaillées , voir le drapeau [ https://www.hex-rays.com/products/ida/support/sdkdoc/group___f_c__.html ]
Voir bloc spécifié
id = 0x1
f_blocks = idaapi.FlowChart(idaapi.get_func(fn), flags=idaapi.FC_PREDS)
block = f_blocks[id]
print block.id
instructions Assembleur traversal
BasicBlock
classe bloc défini comme suit: [start_ea, end_ea) à
travers la totalité de la séquence d'instructions en assembleur
curr_addr = block.start_ea
while curr_addr < block.end_ea:
print idc.GetDisasm(curr_addr)
curr_addr = idc.NextHead(curr_addr, block.end_ea)
Si vous avez besoin pour obtenir le dernier bloc d'instructions, vous pouvez écrire:
addr = idc.PrevHead(block.end_ea)
print idc.GetDisasm(addr)
l'accès aux données 0x01
Fonction et l'adresse de fonction
- Obtenez le nom de la fonction
idc.get_func_name(ea)
, ea dans la fonction peut être - fonction d'acquisition de la propriété
idc.get_func_attr(ea, attr)
, qui peut être utilisé pour afficher la première adresse de la fonction, la fonction FLAG, etc.
idc.get_func_attr(ea, FUNCATTR_START)
idc.get_func_attr(ea, FUNCATTR_END)
idc.get_func_attr(ea, FUNCATTR_FLAGS)
instruction
- Obtenez Mnémonique
idc.print_insn_mnem(ea)
- Obtient le nombre d'opérations
print_operand(ea, n)
- Obtient le type d'opérande
get_operand_type(ea, n)
0x02 Conseils
Afin de faciliter l'entrée ida utilisé directement, le code Python peut être organisé dans une ligne, à la suite deux exemples de
vue de l' ensemble du bloc de fonction en cours
for block in idaapi.FlowChart(idaapi.get_func(idc.get_screen_ea())) : print "%d: [0x%x, 0x%x)" % ( block.id, block.startEA, block.endEA)
Vérifier le bloc spécifié du noeud successeur
id=0x1;successors=idaapi.FlowChart(idaapi.get_func(idc.get_screen_ea()))[id].succs()
for block in successors: print "%d: [0x%x, 0x%x)" % ( block.id, block.startEA, block.endEA)
0x03 matériel d'apprentissage pertinents
- Guide du débutant à IDAPython
- Dans le répertoire IDA / python
idc.py
, ce code peut être trouvé dans presque toutes les interfaces requises - http://scz.617.cn:8/misc/201811281121.txt