不同的功能长度和不同IDA Pro版本的控制流程图

我正在尝试分析IDA Pro中x86 .so库中的函数 . 我在一台机器上安装了IDA Pro 7.1,在另一台机器上安装了IDA Pro 6.8 . 功能长度和相应的控制流程图(Graph View和WinGraph32)在两个版本之间是不同的 .

在6.8中,功能要大得多,并从通常的序幕开始

push ebp
mov ebp, esp

但是在7.1中,函数的结束时间要早得多,而6.8仍然认为的其余内存空间是相同的函数,它被分成其他函数 . 但是,这些功能没有通常的序幕 .

值得注意的是,我正在分析的函数可能会被混淆,因此序言/结尾指令序列可能被其他东西替换 . 请问IDA Pro如何检测功能?

我应该相信哪一个?

回答(1)

2 years ago

如果没有所有信息(汇编指令,已识别的相关代码的交叉引用等),我们只会留下不同的一般和高级解释 . 包括一些更具体的细节可能允许更详细和具体的答案 .

分析函数边界是反汇编程序必须解决的任务之一 . 这意味着反汇编程序通常采用不同类型的启发式方法(巧妙地)猜测函数的开始和结束位置 . IDA 's biggest advantages (especially in it'早期的其中一项是's interactivity - the users'能够修复,调整和修改自动分析结果 .

由于这是一项艰巨的任务,因为修复和逻辑方面的改进,不同的IDA版本可能会略有不同 . 在您的情况下,这些改进/修复实际上会恶化最终结果而不是改进它 . 重要的是要注意,一个例子并不意味着相关的改进是错误的 .

混淆的代码很难正确分析,也很好地表明了阻止成功分析功能结构的尝试 .