反汇编理解函数调用过程
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 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段