微信建设网站找哪家,wordpress弹出式表单,wordpress转dz,沈阳酒店企业网站制作公司布局介绍
软件启动后会 有几个选项#xff0c;一般直接选择Go 即可 之后的工作台布局如下
开始分析
分析的第一个#xff0c;将PE 文件拖入工作区 刚开始接触#xff0c;我们先保持默认选项#xff0c;其它选项后面会详细讲解#xff0c;点击OK 后#xff0c;等待分析…布局介绍
软件启动后会 有几个选项一般直接选择Go 即可 之后的工作台布局如下
开始分析
分析的第一个将PE 文件拖入工作区 刚开始接触我们先保持默认选项其它选项后面会详细讲解点击OK 后等待分析完成 分析后的界面布局如下 默认是流程化显示汇编代码可以按空格转换为正常模式这里自动定位到main 函数了 我们先分析下 main 函数的整体流程将main 函数的反汇编代码复制过来
.text:00401010 ; S U B R O U T I N E
.text:00401010
.text:00401010 ; Attributes: bp-based frame
.text:00401010
.text:00401010 ; int __cdecl main_0(int argc, const char **argv, const char **envp)
.text:00401010 _main_0 proc near ; CODE XREF: _main↑j
.text:00401010
.text:00401010 var_40 byte ptr -40h
.text:00401010 argc dword ptr 8
.text:00401010 argv dword ptr 0Ch
.text:00401010 envp dword ptr 10h
.text:00401010
.text:00401010 55 push ebp
.text:00401011 8B EC mov ebp, esp
.text:00401013 83 EC 40 sub esp, 40h
.text:00401016 53 push ebx
.text:00401017 56 push esi
.text:00401018 57 push edi
.text:00401019 8D 7D C0 lea edi, [ebpvar_40]
.text:0040101C B9 10 00 00 00 mov ecx, 10h
.text:00401021 B8 CC CC CC CC mov eax, 0CCCCCCCCh
.text:00401026 F3 AB rep stosd
.text:00401028 68 1C 20 42 00 push offset Format ; Hello World!\n
.text:0040102D E8 2E 00 00 00 call _printf
.text:0040102D
.text:00401032 83 C4 04 add esp, 4
.text:00401035 33 C0 xor eax, eax
.text:00401037 5F pop edi
.text:00401038 5E pop esi
.text:00401039 5B pop ebx
.text:0040103A 83 C4 40 add esp, 40h
.text:0040103D 3B EC cmp ebp, esp
.text:0040103F E8 9C 00 00 00 call __chkesp
.text:0040103F
.text:00401044 8B E5 mov esp, ebp
.text:00401046 5D pop ebp
.text:00401047 C3 retn
.text:00401047
.text:00401047 _main_0 endp
.text:00401047
.text:00401047 ; ---------------------------------------------------------------------------.text:00401010 55 push ebp 将ebp 寄存器入栈上面的都是一些描述信息暂时忽略我们从这一行开始
.text:00401011 8B EC mov ebp, esp 将esp 寄存器赋值给ebp .text:00401013 83 EC 40 sub esp, 40h 开辟40h 的栈空间备用 .text:00401016 53 push ebx 将ebx 入栈 .text:00401017 56 push esi 将esi 入栈 .text:00401018 57 push edi 将edi 入栈 .text:00401019 8D 7D C0 lea edi, [ebpvar_40] 加载 ebpvar_40 地址到 edi .text:0040101C B9 10 00 00 00 mov ecx, 10h 将ecs 赋值为10h .text:00401021 B8 CC CC CC CC mov eax, 0CCCCCCCCh 将eax 赋值为0CCCCCCCCh .text:00401026 F3 AB rep stosd 重复上面的操作10h 其实这4条汇编代码就是个循环赋值过程
.text:00401028 68 1C 20 42 00 push offset Format 传入参数为什么是传入参数呢这里要结合下面call 指令联合分析根据x86 的调用约定在调用函数前需要先将参数入栈双击Format 可以定位到数据区不清楚PE 文件结构的可以参考文章 《PE 文件结构解析》
.text:0040102D E8 2E 00 00 00 call _printf 调用printf 函数
后面的指令暂时可以认为是函数调用完之后来清理现场的不用过多纠结这几个一般出现在函数调用结束之后用来平衡函数的堆栈。
至此main 函数分析完成