一段反汇编代码求高手指点 50

代码如下004B73808B4C2408movecx,dwordptrss:[esp+0x8]004B738453pushebx004B738555pushebp004B... 代码如下
004B7380 8B4C24 08 mov ecx,dword ptr ss:[esp+0x8]
004B7384 53 push ebx
004B7385 55 push ebp
004B7386 56 push esi
004B7387 8B7424 10 mov esi,dword ptr ss:[esp+0x10]
004B738B 57 push edi
004B738C 33FF xor edi,edi
004B738E 8B2E mov ebp,dword ptr ds:[esi]
004B7390 8B56 04 mov edx,dword ptr ds:[esi+0x4]
004B7393 8B46 08 mov eax,dword ptr ds:[esi+0x8]
004B7396 3BCF cmp ecx,edi
004B7398 897C24 14 mov dword ptr ss:[esp+0x14],edi
004B739C 76 3A jbe Xserver_c.004B73D8
004B739E 83F8 01 cmp eax,0x1
004B73A1 72 35 jb Xserver_c.004B73D8
004B73A3 B9 07000000 mov ecx,0x7
004B73A8 BB 01000000 mov ebx,0x1
004B73AD 2BCA sub ecx,edx
004B73AF D3E3 shl ebx,cl
004B73B1 8A4D 00 mov cl,byte ptr ss:[ebp]
004B73B4 22D9 and bl,cl
004B73B6 F6DB neg bl
004B73B8 1BDB sbb ebx,ebx
004B73BA F7DB neg ebx
004B73BC 42 inc edx
004B73BD 83E2 07 and edx,0x7
004B73C0 8D3C7B lea edi,dword ptr ds:[ebx+edi*2]
004B73C3 75 02 jnz Xserver_c.004B73C7
004B73C5 48 dec eax
004B73C6 45 inc ebp
004B73C7 8B4C24 14 mov ecx,dword ptr ss:[esp+0x14]
004B73CB 8B5C24 18 mov ebx,dword ptr ss:[esp+0x18]
004B73CF 41 inc ecx
004B73D0 3BCB cmp ecx,ebx
004B73D2 894C24 14 mov dword ptr ss:[esp+0x14],ecx
004B73D6 ^ 72 C6 jb Xserver_c.004B739E
004B73D8 8946 08 mov dword ptr ds:[esi+0x8],eax
004B73DB 8BC7 mov eax,edi
004B73DD 892E mov dword ptr ds:[esi],ebp
004B73DF 8956 04 mov dword ptr ds:[esi+0x4],edx
004B73E2 5F pop edi
004B73E3 5E pop esi
004B73E4 5D pop ebp
004B73E5 5B pop ebx
004B73E6 C3 retn
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏50(财富值+成长值)
黑色杰克史密斯
2014-08-16 · 超过19用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:32.5万
展开全部
004B7380 8B4C24 08 mov ecx,dword ptr ss:[esp+0x8] // ecx = A
004B7384 53 push ebx
004B7385 55 push ebp
004B7386 56 push esi //入栈保存现场
004B7387 8B7424 10 mov esi,dword ptr ss:[esp+0x10] // esi = B 应该也是一个地址
004B738B 57 push edi //
004B738C 33FF xor edi,edi // 0
004B738E 8B2E mov ebp,dword ptr ds:[esi] //ebp保存基址
004B7390 8B56 04 mov edx,dword ptr ds:[esi+0x4] // edx = C
004B7393 8B46 08 mov eax,dword ptr ds:[esi+0x8] // eax = D
004B7396 3BCF cmp ecx,edi // 判断 ECX(A) 是否 > 0
004B7398 897C24 14 mov dword ptr ss:[esp+0x14],edi //esp+0x14 = 0
004B739C 76 3A jbe Xserver_c.004B73D8 // 不是的话则跳转到 004B73D8
004B739E 83F8 01 cmp eax,0x1 // 否则比较 eax(D) 是否比 1 小
004B73A1 72 35 jb Xserver_c.004B73D8 //是的话 跳到 004B73D8
004B73A3 B9 07000000 mov ecx,0x7 // 否则 ecx(A) = 7
004B73A8 BB 01000000 mov ebx,0x1 // ebx = 1
004B73AD 2BCA sub ecx,edx // ecx = 7 - edx (C)
004B73AF D3E3 shl ebx,cl // ebx 向←移动 cl 位(Byte/最后一位进入CF位)
004B73B1 8A4D 00 mov cl,byte ptr ss:[ebp] // 也就是 B 地址的第一个字节 呵呵~~
004B73B4 22D9 and bl,cl // bl cl 两个 Byte 寄存器 & 操作
004B73B6 F6DB neg bl // bl 求补 用 0 - bl
004B73B8 1BDB sbb ebx,ebx // 看 CF 位 CF 位 = 0 那么 ebx = 0 否则 ebx = 0xFFFFFFFF
004B73BA F7DB neg ebx // ebx 求补
004B73BC 42 inc edx // ebx++
004B73BD 83E2 07 and edx,0x7 // ebx 与 7 与操作 ..ebx最高只能为 7
004B73C0 8D3C7B lea edi,dword ptr ds:[ebx+edi*2] // edi = ds:[ebx+edi*2] 的地址
004B73C3 75 02 jnz Xserver_c.004B73C7 // 若 and 结果不为 0 则跳转 到 004B73C7
004B73C5 48 dec eax // D--
004B73C6 45 inc ebp // ebp ++

// 004B73C7 //
8B4C24 14 mov ecx,dword ptr ss:[esp+0x14] // ecx = 0 (esp+0x14 = 0)
004B73CB 8B5C24 18 mov ebx,dword ptr ss:[esp+0x18] // ebx = esp+0x18
004B73CF 41 inc ecx // ecx ++ ecx = 1
004B73D0 3BCB cmp ecx,ebx // 1 - ebx
004B73D2 894C24 14 mov dword ptr ss:[esp+0x14],ecx // esp+0x14 = 1
004B73D6 ^ 72 C6 jb Xserver_c.004B739E // ebx 是否 > 1 大于 则 转移 004B739E

// 004B73D8 //
8946 08 mov dword ptr ds:[esi+0x8],eax // D = eax
004B73DB 8BC7 mov eax,edi // 看之前的跳转分支 ... 决定 eax 是什么 ..
004B73DD 892E mov dword ptr ds:[esi],ebp
004B73DF 8956 04 mov dword ptr ds:[esi+0x4],edx // C = edx
004B73E2 5F pop edi // 出栈 恢复现场
004B73E3 5E pop esi
004B73E4 5D pop ebp
004B73E5 5B pop ebx
004B73E6 C3 retn //子程序返回
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式