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

Linux下能否从未剥离的交叉编译ARM二进制恢复C++源码?

从未剥离的ARM交叉编译二进制恢复C++源码的可行方法

首先明确:完全还原和原始源码一模一样的代码基本不可能,但借助工具可以生成具备可读性的汇编或伪代码,帮你重写或梳理原有逻辑。

  • 使用交叉编译工具链的反汇编工具
    找到对应ARM架构的交叉编译objdump(比如arm-linux-gnueabihf-objdump,具体名称看你的工具链),执行以下命令导出带符号的反汇编内容:

    arm-linux-gnueabihf-objdump -d -S -l your_binary > disassembly.txt
    

    参数说明:-d反汇编代码段,-S尝试将汇编与残留的C++源码片段(如果编译时带了调试信息)混合显示,-l输出行号对应关系。因为二进制未剥离,符号表完整,能直接看到函数名、全局变量名,这会大幅降低逻辑梳理的难度。

  • 用逆向工程工具生成伪代码
    用IDA Pro或Ghidra这类专业逆向工具:

    • 导入二进制时选择匹配的ARM架构(比如ARMv7或ARM64),工具会自动解析符号表,生成结构化的类C伪代码。哪怕没有完整调试信息,这类工具也能通过分析控制流、函数调用关系生成可读性较强的代码。
    • 未剥离的二进制能让工具直接识别函数名、变量名,伪代码的还原度会更高,你可以基于这些伪代码重新编写符合原有逻辑的C++源码。
  • 提取调试信息辅助还原
    如果编译时加了-g调试选项(未剥离的二进制通常会保留),用交叉工具链的readelf提取调试信息:

    arm-linux-gnueabihf-readelf --debug-dump=all your_binary > debug_info.txt
    

    里面包含类型定义、变量名、函数参数、行号映射等信息,能帮你更准确地还原变量类型和函数逻辑细节。

  • 额外小技巧

    • 用strings工具提取二进制里的字符串常量,快速定位业务关键模块:
      strings your_binary > extracted_strings.txt
      
    • 对于C++特有的模板、重载、虚函数等特性,反汇编或伪代码会和原始源码有较大差异,需要结合你对业务逻辑的理解去修正还原。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:15:06