我正在使用radare2,我已经分解了函数:sym.loop,它包含一个switch,它有4个cases调用了不同的功能。在执行任何函数调用之后,程序退出loop函数。这是我的问题:雷达显示的第一个exit后,反汇编代码停止。我看不到该函数的其余代码,尽管在退出函数后有跳转指示存在更多内容。一个错误?

以下是循环功能的代码:

void loop(int a) {
    type[0] = a;
    while (true) {
        switch (type[0]) {
        case 1:
            function1(arg);
            break;
        case 2:
            function2(arg);
            break;
        case 3:
            function3(arg);
            break;
        default:
            printf("Command unrecognized.\n");
        case 4:
            function4();
            break;
        }
    }
}


注意:如果代码中有任何错误,可能是由于尝试清除调试消息中的代码或其他任何内容...但是想法是主代码没有错误,只是反汇编程序不能打印整个功能。
反汇编代码在case1结束后停止中断(退出功能)。

不显示返回值。

评论

您能否分享pdf @ sym.loop的输出?另外,您是否可以共享二进制文件以便我们进行更深入的研究?

您是如何编译的?是否打开了任何优化?可以将二进制文件放在某处吗?

问题仍然存在吗?您可以共享二进制文件吗?

#1 楼

您可能还需要在分析之前启用跳转表分析选项e anal.jmptbl,并且还需要最新的git版本的radare2。

/ 2018由于功能已得到改进,现在默认为true。

评论


嗯,这可能是问题所在,您能帮我启用它吗?

–弗洛林
17年8月16日在13:50

Simpy从雷达外壳内部运行anal.jmptbl = true。进一步了解配置:radare.gitbooks.io/radare2book/content/configuration/intro.html

–巨型甜菜
17年8月17日在5:54

@Megabeets刚获得了最新版本,也将e anal.jmptbl设置为true,但结果是相同的。但是:如果我按pC可以在更多行中可视化代码,则将显示整个功能(可能会有帮助)

–弗洛林
17年8月17日在9:18

为什么该选项不是默认选项?

– joxeankoret
18年6月16日在17:13