您的位置:首页 > 大数据 > 人工智能

汇编学习第四课之main函数反汇编

2016-05-11 14:13 429 查看
简单熟悉了下汇编的指令以及if 、if else、循环语句后,开始着手分析最常见的main函数了

int main(int argc, char* argv[])

{

00F01370  push        ebp  //保存栈底指针ebp

00F01371  mov         ebp,esp  //调整栈底指针位置到栈顶

00F01373  sub         esp,0C0h //抬高栈顶esp,此时开辟0C0的栈空间,作为局部变量的存储空间

00F01379  push        ebx  //保存寄存器ebx

00F0137A  push        esi   //保存寄存器esi

00F0137B  push        edi   //保存寄存器edi

00F0137C  lea         edi,[ebp-0C0h] //取出此函数可用栈空间首地址

00F01382  mov         ecx,30h //设置ecx为0x30

00F01387  mov         eax,0CCCCCCCCh //将局部变量初始化为0CCCCCCCCh

00F0138C  rep stos    dword ptr es:[edi]

    return 0;

00F0138E  xor         eax,eax //设置返回值为0

}

00F01390  pop         edi  //还原寄存器edi

00F01391  pop         esi  //还原寄存器esi

00F01392  pop         ebx  //还原寄存器ebx

00F01393  mov         esp,ebp //降低栈顶esp,此时局部变量空间被释放

00F01395  pop         ebp  

00F01396  ret 

在以后的逆向调试时,第一时间需要找的就是main函数,先记录下分析过程

使用ollydbg寻找main函数入口点的过程对于初学者比较麻烦.初次学习的人可以跟着看雪上的教程自己实验下
http://bbs.pediy.com/showthread.php?t=113691
同时记录下函数调用时返回值

有关ss部分的注释:

;一般而言,ss:[ebp+4]处为返回地址

;ss:[ebp+8]处为第一个参数值(这里是a),ss:[ebp+0Ch]处为第二个参数(这里是b,这里8+4=12=0Ch)

;ss:[ebp-4]处为第一个局部变量(如main中的result),ss:[ebp]处为上一层EBP值

;ebp和函数返回值是32位,所以占4个字节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: