我有一个文本文件,其中包含功能名称和地址对的列表,其结构如下:

。)根据文本文件自动重命名IDA反汇编的所有关系函数?

评论

这种地址形式是什么意思?

这是旧的DOS 16位程序的分段地址。参见此处:en.wikipedia.org/wiki/X86_memory_segmentation如果可以简化操作,我们可以认为它包含32位常规地址。

#1 楼

这种自动执行名为IDAPython的事物的方法,其文档在这里:

1-将此脚本保存在某处,记住位置。

#Not used, not debbugged, not ran even once
#Use on your own risk, beware errors

import idaapi
import idautils
import idc

def do_rename(l):
    splitted = l.split()
    straddr = splitted[0]
    strname = splitted[1].replace("\r", "").replace("\n", "")

    if straddr.find(":") != -1: #assuming form segment:offset
        #removing segment, offset should be unique, if it isn't so, we should handle it differently
        straddr = straddr.split(":")[1]

    eaaddr = int(straddr, 16)
    idc.MakeCode(eaaddr)
    idc.MakeFunction(eaaddr)
    idc.MakeNameEx(int(straddr, 16), strname, idc.SN_NOWARN)


if __name__ == "__main__":
    f = open( "your_file_name", "r")
    for l in f:
        do_rename(l)
    f.close()


在IDA中,打开文件->脚本文件,选择脚本并运行。
请注意,您应该插入文件名并验证地址转换是否正确。

希望它能提供某种指导。

评论


告诉我:)

– w s
16年1月28日在14:13

它像魅力一样运作。我所做的唯一更改是计算线性地址的方式:eaaddr = int(address [0],16)* 16 + int(address [1],16)+偏移量。偏移量是根据IDA能够找到的C函数(我知道该地址)计算的:offset = LocByName(“ _ system”)-0x189B

– tigrou
16年1月28日在15:38