首页
社区
课程
招聘
[旧帖] [求助]求教简单的汇编问题 0.00雪花
发表于: 2009-10-26 16:55 4014

[旧帖] [求助]求教简单的汇编问题 0.00雪花

2009-10-26 16:55
4014
对汇编的概念没大弄懂,别笑话。。。
一下是一段winlicense中smartactivate里的vc实例在od中的代码
00401020   > \55            push    ebp
00401021   .  8BEC          mov     ebp, esp
00401023   .  83EC 40       sub     esp, 40
00401026   .  53            push    ebx
00401027   .  56            push    esi
00401028   .  57            push    edi
00401029   .  8D7D C0       lea     edi, dword ptr [ebp-40]
0040102C   .  B9 10000000   mov     ecx, 10
00401031   .  B8 CCCCCCCC   mov     eax, CCCCCCCC
00401036   .  F3:AB         rep     stos dword ptr es:[edi]
00401038   .  6A 00         push    0
0040103A   .  E8 83C80000   call    <jmp.&WinlicenseSDK.#7>
0040103F   .  83F8 01       cmp     eax, 1
00401042      75 1F         jnz     short 00401063
00401044   .  8BF4          mov     esi, esp
00401046   .  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
00401048   .  68 48204200   push    00422048                         ; |Title = "Winlicense"
0040104D   .  68 1C204200   push    0042201C                         ; |Text = "This application has been activated"
00401052   .  6A 00         push    0                                ; |hOwner = NULL
00401054   .  FF15 08A34200 call    dword ptr [<&USER32.MessageBoxA>>; \MessageBoxA

问题是push 0 中的这个0是什么意思? 应该是传递参数吧? 整个messagebox中就这么4个参数? 还有就是call messagebox后他会依次把压入的部分给放出来吗?晕,写到一半才发现这个可以在od中查看到的。。。  不过还是求解。。。还有就是od中有没有方便的命令去查看esp-40这类数据?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
d esp-40
2009-10-26 16:58
0
雪    币: 273
活跃值: (64)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
0代表的是NULL,也就是没有父窗口句柄
是的就这四个参数可以参考MSDN或者直接在BAIDU里搜索就知道了
第三个问题是理解栈帧的概念在ODAY黑客中有讲解
dd esp-40就能查看内存信息
2009-10-26 17:11
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
0040103A   .  E8 83C80000   call    <jmp.&WinlicenseSDK.#7>
0040103F   .  83F8 01       cmp     eax, 1
00401042      75 1F         jnz     short 00401063
3A上面的代码和这段代码是相连的吗?可以直接用这段代码判断吗?
2009-10-26 17:24
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这段代码其实是调用一个函数并根据返回值判断,后面是否生成一个窗口。所以从逻辑上看是密切相关的。
2009-10-27 10:06
0
雪    币: 202
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
你进去messageboxA里面会有一个retn 10 这个就是把四个参数放出的。。意思应是pop 返回地址。再把esp+10h。那么,现在已平衡了。
2009-10-27 10:26
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
路过,学习~~
2009-10-29 21:28
0
雪    币: 132
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
第一个:因为0就是NULL,自然是参数传递。
第二个:messagebox的参数看MSDN就可以了,的确只有四个,你那上面标出来的。
第三个:messagebox是API函数,API函数几乎是__stdcall的调用方式,也就是参数从右向左进栈,函数内部也就是messagebox自己来平衡堆栈,用OD跟进就看的到了。
第四个:用d esp-40就成了。
2009-10-29 23:18
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习了 我就是这方面好欠缺呀
2009-11-1 21:56
0
游客
登录 | 注册 方可回帖
返回
//