You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用IDA Pro查找新版本二进制文件中地址发生变动的函数?

基于IDA Pro的ELF .so函数跨版本地址追踪方案

一、自动识别所有版本间地址变动的函数

可以实现,最常用的方案是使用IDA配套的BinDiff对比工具,操作步骤如下:

  • 分别对1.0、1.1版本的.so文件执行IDA完整自动分析,分析结束后保存各自的idb/i64数据库文件
  • 在1.0版本的数据库界面打开BinDiff插件(新版IDA已内置,老版本需单独安装),选择Diff Databases后导入1.1版本的数据库,等待对比完成
  • 切换到BinDiff结果面板的Functions标签页,所有函数的新旧地址、匹配相似度、地址偏移都会直接展示,筛选新旧地址不一致的条目即可得到全部地址发生变动的函数列表

如果没有安装BinDiff,也可以用简单的自制脚本实现:
分别在两个版本的IDA Python控制台执行命令导出函数地址表:

# 导出格式为 函数名: 十六进制地址
for func_ea in idautils.Functions():
    print(f"{idc.get_func_name(func_ea)}: {hex(func_ea)}")

将两次导出的结果做对齐对比,即可快速找到相同函数名对应的地址差异。

二、通过旧版本地址查询新版本对应函数地址

根据你的场景,有多个可落地的方案:

场景1:函数保留公开符号(如示例中的Writer_Starting函数名未被剔除)

直接在新版本IDA中按快捷键Ctrl+L,搜索函数名Writer_Starting即可直接得到新地址,无需关联旧地址。

场景2:文件被strip无公开符号,仅持有旧地址0x3DA224

  • BinDiff快速跳转:在旧版本数据库中跳转到0x3DA224地址对应的函数,右键选择BinDiff -> Jump to matched function in other DB,即可直接跳转到新版本对应函数的地址,匹配准确率可达95%以上
  • 特征码搜索:提取旧地址对应函数前16~32字节的机器码作为特征,在新版本二进制中执行字节搜索,搜索时勾选忽略重定位项的选项,只要函数逻辑未修改就能直接定位到新地址
  • 固定偏移计算:如果是小版本更新(如你的示例中地址仅偏移4字节),通常所有未修改函数的地址偏移是固定的,找一个两个版本中确认是同一个的函数算出偏移量,旧地址加上该偏移量即可直接得到新地址

注意:如果版本更新修改了函数实现、或者开启了代码混淆/加固,优先使用基于控制流图匹配的BinDiff方案,准确率远高于单纯的字节特征匹配。

内容的提问来源于stack exchange,提问作者ibrahem hossam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:09:04