Un des documents d'apprentissage et d'utilisation Python IDA

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

BasicBlockclasse 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

Je suppose que tu aimes

Origine www.cnblogs.com/go2sleep/p/12466751.html
conseillé
Classement