逆向2--函数的调用过程

 

这个程序的源代码为调用一个加法函数,打印main用来定位主函数入口,目的是分析一个函数在调用的过程中汇编中的代码是怎么样的

 

 

打开反汇编,寻找到主函数;

 

 call 调用一个函数的过程是:push eip 先保存当前的eip指令指针,然后jum到函数的地址

 

下面这里是按F7进入到函数里面

一个函数的调用过程:

00CBD300  /> \55            PUSH EBP                            ;  保存栈底指针
00CBD301  |.  8BEC          MOV EBP,ESP                         ;  把栈顶指针给栈底,栈顶和栈底指向同一地址
00CBD303  |.  81EC C0000000 SUB ESP,0C0                         ;  抬高栈顶0c0长度,开辟一个新的栈长度
00CBD309  |.  53            PUSH EBX                            ;  下面三个寄存器可能会用到覆盖原来的值,先保存起来,等下怕这个函数改成什么鬼了都不知道,避免破坏原理的main函数
00CBD30A  |.  56            PUSH ESI
00CBD30B  |.  57            PUSH EDI
00CBD30C  |.  8DBD 40FFFFFF LEA EDI,DWORD PTR SS:[EBP-C0]       ;  新的栈顶的首地址给了edi
00CBD312  |.  B9 30000000   MOV ECX,30                          ;  ecx经常用来循环,循环计数器初始化
00CBD317  |.  B8 CCCCCCCC   MOV EAX,CCCCCCCC
00CBD31C  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]         ;  rep 重复执行上面一条 把新的栈空间全部刷成cccc,初始化
00CBD31E  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]        ;  传进来的参数
00CBD321  |.  0345 0C       ADD EAX,DWORD PTR SS:[EBP+C]        ; 实现加法功能
00CBD324  |.  5F            POP EDI                             ;  复原原来的值
00CBD325  |.  5E            POP ESI
00CBD326  |.  5B            POP EBX
00CBD327  |.  8BE5          MOV ESP,EBP                         ;  复原原来的栈顶
00CBD329  |.  5D            POP EBP                             ;  复原栈底
00CBD32A  \.  C3            RETN                                ;  eax 默认返回函数

 

posted @ 2021-04-11 13:22  包子TT  阅读(138)  评论(0编辑  收藏  举报