汇编中子程序调用问题

我在调试这程序时碰到这样的问题。程序段如下:......004B55D0PUSHEBP004B55D1MOVEBP,ESP004B55D3PUSH0004B55D5PUS... 我在调试这程序时碰到这样的问题。程序段如下:
......
004B55D0 PUSH EBP
004B55D1 MOV EBP,ESP
004B55D3 PUSH 0
004B55D5 PUSH 0
004B55D7 PUSH EBX
004B55D8 PUSH ESI
004B55D9 MOV ESI,EDX
004B55DB MOV EBX,EAX
004B55DD XOR EAX,EAX
004B55DF PUSH EBP
004B55E0 PUSH _UnPacke.004B5654
004B55E5 PUSH DWORD PTR FS:[EAX]
004B55E8 MOV DWORD PTR FS:[EAX],ESP
004B55EB MOV EAX,EBX
004B55ED CALL _UnPacke.004B5884
004B55F2 TEST AL,AL
004B55F4 JNZ SHORT _UnPacke.004B5601
004B55F6 MOV EDX,ESI
004B55F8 MOV EAX,EBX
004B55FA CALL _UnPacke.004609F8
004B55FF JMP SHORT _UnPacke.004B5639
004B5601 LEA EDX,DWORD PTR SS:[EBP-4]
004B5604 MOV EAX,EBX
004B5606 CALL _UnPacke.004B55BC
004B560B MOV EDX,DWORD PTR SS:[EBP-4]
004B560E MOV ECX,ESI
004B5610 MOV EAX,EBX
004B5612 CALL _UnPacke.004B6694
004B5617 CMP BYTE PTR DS:[EBX+22C],0
004B561E JE SHORT _UnPacke.004B5639
004B5620 LEA EAX,DWORD PTR SS:[EBP-8]
004B5623 PUSH EAX
004B5624 MOV EDX,DWORD PTR DS:[ESI]
004B5626 XOR ECX,ECX
004B5628 MOV EAX,EBX
004B562A CALL _UnPacke.004B664C
004B562F MOV EDX,DWORD PTR SS:[EBP-8]
004B5632 MOV EAX,ESI
004B5634 CALL _UnPacke.00404318
004B5639 XOR EAX,EAX
004B563B POP EDX
004B563C POP ECX
004B563D POP ECX
004B563E MOV DWORD PTR FS:[EAX],EDX
004B5641 PUSH _UnPacke.004B565B
004B5646 LEA EAX,DWORD PTR SS:[EBP-8]
004B5649 MOV EDX,2
004B564E CALL _UnPacke.004042E8
004B5653 RET
004B5654 JMP _UnPacke.00403C44
004B5659 JMP SHORT _UnPacke.004B5646
004B565B POP ESI
004B565C POP EBX
004B565D POP ECX
004B565E POP ECX
004B565F POP EBP
004B5660 RET
......
0054B842 CALL _UnPacke.004B55D0
0054B847 MOV ECX,DWORD PTR SS:[EBP-58]
......
当执行到0054B842的CALL时,能跳到004B55D0去执行,但当执行到004B5653的RET时并不会返回0054B847去,而是跳到004B565B去,再执行到004B5660的RET时才返回0054B847去,请问这是为什么?
依照我的理解,CALL调用子程序后当执行到第1个RET后就应该返回原程序,但这里为什么非旦不返回还跳开2条JMP指令,转而去执行POP指令,非要执行到004B5660的第2个RET后才返回原程序?请高手指点。回答得好有加分。
展开
 我来答
傲世修罗王
2007-04-04 · TA获得超过1085个赞
知道小有建树答主
回答量:1034
采纳率:0%
帮助的人:741万
展开全部
004B5641 PUSH _UnPacke.004B565B
004B5646 LEA EAX,DWORD PTR SS:[EBP-8]
004B5649 MOV EDX,2
004B564E CALL _UnPacke.004042E8
004B5653 RET
004B5654 JMP _UnPacke.00403C44
004B5659 JMP SHORT _UnPacke.004B5646
004B565B POP ESI

在004B5659处, 程序通过JMP 指令跳到004B5646, 执行过程中发生函数调用, 调用结束后, 返回到JMP的下一条指令004B565B 处去执行, 这有什么不好理解的呢?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式