Ghidra WARNING: Could not recover jumptable at XXXXXX.Too many branches

在 Ghidra 中反汇编 ARM 二进制文件时,我经常看到这些警告:

/* WARNING: Could not recover jumptable at 0x0747c198. Too many branches */
/* WARNING: Treating indirect jump as call */

他们的意思是什么?为了理解这些问题的原因,我应该学习哪些基本的架构概念?

这是一个真实程序的例子,在 Ghidra 的反汇编中看到:

    if (param_2 == 0x78) {
                /* WARNING: Could not recover jumptable at 0x0747c198. Too many branches */
                /* WARNING: Treating indirect jump as call */
      uVar3 = (*DAT_0747c19c)();
      return uVar3;
    }

 

有时您会在反编译器视图中看到警告,指出有太多分支无法恢复跳转表。一个原因是实际上有一个跳转表,但反编译器无法确定 switch 变量的边界

对于您的示例,这表示可能有一个跳转表(实际上只是一个指针数组),但反编译器无法弄清楚不同的可能性param2是什么。

吉德拉建议:

在这种情况下,您可以手动添加跳转目标,然后运行脚本 SwitchOverride.java。注意:要在程序中查找此类位置,请运行脚本 FindUnrecoveredSwitchesScript.java。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 17:40:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 17:40:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 17:40:01       87 阅读
  4. Python语言-面向对象

    2024-03-16 17:40:01       96 阅读

热门阅读

  1. 大数据开发(Hive面试真题-卷二)

    2024-03-16 17:40:01       44 阅读
  2. Crossing River

    2024-03-16 17:40:01       41 阅读
  3. 蓝桥杯刷题(八)

    2024-03-16 17:40:01       39 阅读
  4. C++/CLI学习笔记4(快速打通c++与c#相互调用的桥梁)

    2024-03-16 17:40:01       39 阅读
  5. KY54 打印极值点下标

    2024-03-16 17:40:01       50 阅读
  6. 【云原生】实战案列

    2024-03-16 17:40:01       33 阅读
  7. Telegraf--采集指定信息

    2024-03-16 17:40:01       44 阅读
  8. 独立服务器的优势

    2024-03-16 17:40:01       43 阅读
  9. 【黑马程序员】Python面向对象

    2024-03-16 17:40:01       37 阅读
  10. 【C语言】病人信息管理系统

    2024-03-16 17:40:01       48 阅读