反汇编理解函数调用过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反汇编理解函数调用过程相关的知识,希望对你有一定的参考价值。

 

void main()
{
013A4600  push        ebp  
013A4601  mov         ebp,esp  
013A4603  sub         esp,0CCh  
013A4609  push        ebx  
013A460A  push        esi  
013A460B  push        edi  
013A460C  lea         edi,[ebp-0CCh]  
013A4612  mov         ecx,33h  
013A4617  mov         eax,0CCCCCCCCh  
013A461C  rep stos    dword ptr es:[edi]  
    int result = sum(1, 2, 3, 4);
013A461E  push        4  
013A4620  push        3  
013A4622  push        2  
013A4624  push        1  
013A4626  call        sum (013A1442h)  
013A462B  add         esp,10h  
013A462E  mov         dword ptr [result],eax  
}
013A4631  xor         eax,eax  
013A4633  pop         edi  
013A4634  pop         esi  
013A4635  pop         ebx  
013A4636  add         esp,0CCh  
013A463C  cmp         ebp,esp  
013A463E  call        __RTC_CheckEsp (013A12D5h)  
013A4643  mov         esp,ebp  
013A4645  pop         ebp  
013A4646  ret  

 

 

int sum(int a, int b, int m, int n)
{
013A5160  push        ebp  
013A5161  mov         ebp,esp  
013A5163  sub         esp,0CCh  
013A5169  push        ebx  
013A516A  push        esi  
013A516B  push        edi  
013A516C  lea         edi,[ebp-0CCh]  
013A5172  mov         ecx,33h  
013A5177  mov         eax,0CCCCCCCCh  
013A517C  rep stos    dword ptr es:[edi]  
    int c = 11;
013A517E  mov         dword ptr [c],0Bh  
    return a + b + c;
013A5185  mov         eax,dword ptr [a]  
013A5188  add         eax,dword ptr [b]  
013A518B  add         eax,dword ptr [c]  
}
013A518E  pop         edi  
013A518F  pop         esi  
013A5190  pop         ebx  
013A5191  mov         esp,ebp  
013A5193  pop         ebp  
013A5194  ret 

 

 

一张图说明我的理解:

技术分享

画的是新开辟栈帧的过程,退出当前栈帧的过程与之相反。pop edi ,pop esi , pop ebx ,mov esp,ebp ,pop ebp 。之后,edi,esi,ebx恢复原来状态,ebp指向上一个栈帧栈底,esp指向上一个栈帧栈顶。

 

以上是关于反汇编理解函数调用过程的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

深入理解C

如何识别IDA反汇编中动态链接库中的函数

从汇编角度来理解linux下多层函数调用堆栈运行状态

IDA反汇编工具的使用详解

硬核!Python 四种变量的代码对象和反汇编分析