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

如何为LLDB中已剥离的无名符号重命名?

解决方案

LLDB 临时重命名合成符号

LLDB没有原生直接重命名符号的命令,但可以通过Python脚本实现临时替换,新名称会在回溯、反汇编中显示,且可用于设置断点。

步骤1:编写Python脚本

创建名为rename_symbol.py的文件,内容如下:

import lldb

def rename_unnamed_symbol(debugger, command, result, internal_dict):
    args = command.strip().split(maxsplit=1)
    if len(args) != 2:
        result.AppendError("用法:rename-symbol <旧符号名> <新名称>")
        return
    old_sym_name, new_name = args
    target = debugger.GetSelectedTarget()
    
    for module in target.modules:
        sym = module.FindFirstSymbol(old_sym_name)
        if sym.IsValid():
            sym_addr = sym.GetStartAddress()
            target.SetSymbolNameForAddress(sym_addr, new_name)
            result.AppendMessage(f"已将符号 {old_sym_name} 重命名为 {new_name},地址:{sym_addr}")
            return
    result.AppendError(f"未找到符号 {old_sym_name}")

# 注册自定义命令
lldb.debugger.HandleCommand('command script add -f rename_symbol.rename_unnamed_symbol rename-symbol')

步骤2:加载脚本到LLDB

启动LLDB并加载目标二进制后,执行:

command script import /path/to/rename_symbol.py

步骤3:执行重命名

以将___lldb_unnamed_symbol42改为WriteEfiVariable为例:

rename-symbol ___lldb_unnamed_symbol42 WriteEfiVariable

验证效果:

  • 反汇编查看:di -s WriteEfiVariable
  • 设置断点:br set -n WriteEfiVariable -s firmwarepasswd
  • 程序触发断点时,回溯信息会显示新名称

GDB 方案

若可切换到GDB,操作更简洁:

直接重命名符号(GDB 7.10+)

  1. 先获取无名函数的地址:
info symbol ___lldb_unnamed_symbol42
  1. 执行重命名:
rename-symbol 0x<函数地址> WriteEfiVariable

若GDB可识别原合成名称,也可直接运行:

rename-symbol ___lldb_unnamed_symbol42 WriteEfiVariable

验证效果:

  • 反汇编:disassemble WriteEfiVariable
  • 设置断点:break WriteEfiVariable
  • 回溯时会显示新名称

其他开源工具方案

Radare2

Radare2是开源逆向工程工具,支持临时重命名函数:

  1. 加载二进制文件:
r2 -d firmwarepasswd
  1. 查找目标函数地址:
is | grep ___lldb_unnamed_symbol42
  1. 执行重命名:
afn WriteEfiVariable 0x<函数地址>

之后调试时,函数会以新名称显示,支持用新名称设置断点、查看反汇编等操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:34:55