rookie66 发表于 2024-7-26 11:56

ida逆向分析简单递归

先看源代码

然后编译生成exe并导入ida

从左侧的函数栏就可以直接找到main函数(程序的入口函数)

这里可以直接忽略这两个代码块。因为这两块代码代表的是main函数和函数出口,有兴趣的同学可以单独分析一下。

剩下的就可以分为两块代码
一个是递归循环一个是结果打印这个ida很人性化的解析出来了num(int)这个函数
下面首先进入递归函数中进行分析

这个就是递归函数主要逻辑(可以看到iad对于源代码的还原性还是非常高的)
更细致化的分析的化
public _Z3numi
这个声明将 _Z3numi 函数标记为公共符号,使其可以在其他模块中被引用。

_Z3numi proc near
这是 _Z3numi 函数的开始标记,proc near 表示这是一个“近”函数,即函数调用不跨越 64 KB 边界。

arg_0= dword ptr 10h
这是函数的一个局部变量声明,表示 arg_0 是一个 DWORD 类型(4 字节)的局部变量,偏移量是 16(0x10)。

push rbp
将当前基指针 rbp 的值压入栈中,以保存调用函数之前的栈帧基址。

push rbx
将 rbx 寄存器的值压入栈中,以保存调用函数之前的 rbx 的值。rbx 通常用作通用寄存器,在函数调用中需要保留其值。


sub rsp, 28h
将栈指针 rsp 向下移动 40 字节(0x28),为局部变量分配空间。此操作相当于在栈上预留了 40 字节的空间。

lea rbp,
将 rsp + 128 字节(0x80)的地址加载到 rbp。这设置了新的栈帧基址。注意 0x80 可能是用于设置栈帧基址的调整。

mov , ecx
将 ecx 寄存器中的值存储到 的内存位置。计算后的地址是 。这里的 arg_0 是偏移量 0x10,所以实际的地址是 。这意味着 ecx 的值被存储在栈上基于 rbp 的计算位置。

cmp , 2
比较 (即 ecx 存储的地方)的值与 2。arg_0 的偏移量已经考虑在内,所以实际比较的是 的值与 2。

jnz short loc_40154E
如果比较结果不等于零(即 的值不等于 2),则跳转到 loc_40154E 标签处的代码

mov eax,
从 内存位置(局部变量或函数参数)加载值到 eax 寄存器中。arg_0 偏移量已经计算在内,所以实际地址是 rbp - 0x50 + 0x10。

sub eax, 2
将 eax 寄存器中的值减去 2。这个操作的结果会在后续的计算中使用。

mov ecx, eax
将刚刚计算后的 eax 值( - 2)移动到 ecx 寄存器中。

call _Z3numi
调用 _Z3numi 函数(即 num(int))。在调用约定下,ecx 寄存器的值作为参数传递给函数,函数执行后返回值会存储在 eax 中。

mov ebx, eax
将 _Z3numi 函数返回的值(存储在 eax 中)移动到 ebx 寄存器中。这表示 ebx 保存了 num(int) 函数调用的结果。

mov eax,
重新从 内存位置加载原始值到 eax 寄存器中。这是为了进行另一组计算。

sub eax, 1
将 eax 中的值减去 1。

mov ecx, eax
将刚刚计算后的 eax 值( - 1)移动到 ecx 寄存器中。

call _Z3numi
再次调用 _Z3numi 函数,这次是用 ecx 中的新值作为参数,函数返回的结果会存储在 eax 中。

add eax, ebx
将 eax(第二次 _Z3numi 函数调用的结果)与 ebx(第一次 _Z3numi 函数调用的结果)相加,并将结果存储回 eax 中。

这个就是对于递归的细致化分析其中为什么会调用两次call 呢因为源代码中return num(i-2)+num(i-1);调用了两次num函数。
这个就是分析的过程了

感谢各位观众老爷的提醒,由于首次使用这个平台还有一些不熟练恳请原谅,如果有什么错误的地方还请各位大佬指正。

Hmily 发表于 2024-7-29 19:45

贴图方法错了,我帮你编辑了,看这个学习下方法,你弄复杂了https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36

gaoyanchen 发表于 2024-7-26 15:44

看不到图片

rookie66 发表于 2024-7-26 18:24

gaoyanchen 发表于 2024-7-26 15:44
看不到图片

看不到图片吗?我这里是有的呀?

zmzwr 发表于 2024-7-27 01:09

没有图片呀

laotzudao0 发表于 2024-7-27 10:34

这只有文字啊

khoroamu 发表于 2024-7-27 11:13

图片没贴

pjyang 发表于 2024-7-27 14:02

只有文字,图片能重新发一下么

justwz 发表于 2024-7-27 19:52

图片没传上{:1_911:}

q75962619 发表于 2024-7-28 08:28

看不到图片

BonnieRan 发表于 2024-7-28 10:43

分析的好细致,适合ida汇编逆向入门
页: [1] 2 3
查看完整版本: ida逆向分析简单递归