那你能帮帮我吗?

若无特殊说明则表示代码是胖虎自己写的。

函数

idc.ScreenEA()当前光标

idautils.FuncItems(ea)选中函数的所有指令地址

idc.GetDisasm(addr)汇编代码

idc.GetOpnd(addr, 1)第1个操作数(0开始)

idc.GetMnem操作码

脚本

当前函数的全部汇编代码

print "[-] 开始导出反汇编代码"
import idautils
ea = idc.ScreenEA()
addrs = idautils.FuncItems(ea)
text = ''
for addr in addrs:
    #print idc.GetDisasm(addr)
    text += idc.GetDisasm(addr) + '\n'
with open("D:\\disasm.txt", 'w')as f:
    f.write(text)
print "[+] 成功将当前函数的反汇编代码写入d:\\disasm.txt"

当前函数所有汇编操作码及出现次数

print "[-] 开始统计操作码!"
import idautils
ea = idc.ScreenEA()
addrs = idautils.FuncItems(ea)
op_list = []
for addr in addrs:
    op_list.append(idc.GetMnem(addr))
op_dic = {}
for item in set(op_list):
    op_dic[item] = op_list.count(item)
op_dic = sorted(op_dic.items(), key=lambda item:item[1])
for item in op_dic:
    print "%s\t%d" % (item[0], item[1])
print "[+] 成功统计操作码!"

output:

[-] 开始统计操作码!
sub        1
retn    1
add        1
pop        4
push    4
shl        779
mov        31754
shr        31988
and        32767
xor        32767
[+] 成功统计操作码!
Last modification:October 7th, 2020 at 09:28 pm