def GetTextID(funcName):
Sc_func_addr = idc.LocByName(funcName)
#打开一个文件进行保存
exportFile = idc.AskFile(1, "*.*", 'Export Buffer')
f = open(exportFile, 'wb')
for xref in idautils.XrefsTo(Sc_func_addr):
addr = int(hex(xref.frm).replace("L",""),16)
curAddr = addr
imm = 0;
prevAddr = addr
nextAddr = addr
for i in range(0,4):
prevAddr = idc.PrevHead(prevAddr)
#f.writelines(str(prevAddr) + "\n")
if idc.GetOpnd(prevAddr,0) == "R0" and (idc.GetDisasm(prevAddr).__contains__("LDR") or idc.GetDisasm(prevAddr).__contains__("MOV")):
if not idc.GetOpnd(prevAddr,1).__contains__("SP"):
f.write("type:"+str(idc.GetOpType(nextAddr,1))+"\t" +hex(xref.frm).replace("L", "") + "\t\t" +hex(prevAddr)+ "\t\t"+
idc.GetOpnd(prevAddr, 1).replace("=", "") + "\n")
for j in range(0, 4):
#f.writelines(str(nextAddr)+"\n")
#f.writelines(str(nextAddr) + "\n")
nextAddr = idc.NextHead(nextAddr)
if idc.GetOpnd(nextAddr,0) == "R0" and (idc.GetDisasm(nextAddr).__contains__("LDR") or idc.GetDisasm(nextAddr).__contains__("MOV")):
if not idc.GetOpnd(nextAddr,1).__contains__("SP"):
f.write("type:"+str(idc.GetOpType(nextAddr,1))+"\t" +hex(xref.frm).replace("L", "") + "\t\t" +hex(nextAddr)+ "\t\t"+
idc.GetOpnd(nextAddr, 1).replace("=", "") + "\n")
将函数的名称当成参数传到GetTextID 中 就能自动获取到这个函数的参数了 这个是我根据ARM汇编的一些参数传递的规则和汇编语法的规律得出来的代码 然后利用IDA的库函数去处理这样的逻辑 如果是换成x86汇编 或者是函数参数大于3个的话可能会不准确