汇编学习第四课之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个字节
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个字节
相关文章推荐
- ActivityViewController 使用AirDrop分享
- STM32单片机实现中断后不继续向下执行而是返回到main函数
- CDISC SDTM EC/EX domain 学习笔记 - 4
- Mac Mail中删除服务器上的邮件
- kail2.0下hping3的安装和使用
- platform-tools\adb.exe,start-server' failed -- run manually if necessary,adb启动失败,端口被占用
- How to Test Controller Concerns in Rails 4
- Contains Duplicate
- Xcode运行错误:failed to get the task for process XXX
- LNK1123: failure during conversion to COFF: file invalid or corrupt-问题解决办法
- 墙国内新建Rails应用的要点(windows 7环境, Rails 4.2.0)
- svn Error: post-commit hook failed (exit code 127) with output
- Kafka High Availability (下)
- Kafka High Availability (上)
- CDISC SDTM EC/EX domain 学习笔记 - 3
- netstat监控大量ESTABLISHED连接与Time_Wait连接问题
- http://blog.csdn.net/kufeiyun/article/details/9363621
- ORA-01035: only available to users with RESTRICTED
- LeetCode 011: Container With Most Water
- ovs-vsctl: unix:/usr/local/var/run/openvswitch/db.sock: database connection failed