首页
社区
课程
招聘
反汇编中指令指针的执行问题
发表于: 2009-12-12 02:21 3204

反汇编中指令指针的执行问题

2009-12-12 02:21
3204
具体问题是这样的:
压一个地址入堆栈,然后返回(返回后也就是EIP指向压入的地址处,这样的理解对吧)。
可奇怪的是,返回时,EIP指向的是一句指令的中后面一个字节,那这样计算机如何执行呀?
有以下两种情况,请说说理由。

;以下是反汇编的代码
004680FD    68 7B714600     push    46717B
00468102    40              inc     eax
00468103    40              inc     eax
00468104    40              inc     eax
00468105    C3              retn                                ;从这里返回

;情况一
;从0045717A处执行?
0046717A    20E3            and     bl, ah
0046717C    0B0B            or      ecx, dword ptr ds:[ebx]
0046717E    0B0B            or      ecx, dword ptr ds:[ebx]
00467180    50              push    eax
00467181    8AE0            mov     ah, al
00467183    0E              push    cs
00467184    0B0B            or      ecx, dword ptr ds:[ebx]
00467186    0B80 989F020B   or      eax, dword ptr ds:[eax+B029F98]
0046718C    0B58 9B         or      ebx, dword ptr ds:[eax-65]
0046718F    9B              wait
00467190    9B              wait

;情况二
;从0045717B处执行?
0046717B   /E3 0B           jecxz   short 00467188                   ; 00467188
0046717D   |0B0B            or      ecx, dword ptr ds:[ebx]
0046717F   |0B50 8A         or      edx, dword ptr ds:[eax-76]
00467182   |E0 0E           loopdne short 00467192                   ; 00467192
00467184   |0B0B            or      ecx, dword ptr ds:[ebx]
00467186   |0B80 989F020B   or      eax, dword ptr ds:[eax+B029F98]
0046718C    0B58 9B         or      ebx, dword ptr ds:[eax-65]
0046718F    9B              wait
00467190    9B              wait

;情况三
;从0045717C处执行?
0046717A    20E3            and     bl, ah
0046717C    0B0B            or      ecx, dword ptr ds:[ebx]
0046717E    0B0B            or      ecx, dword ptr ds:[ebx]
00467180    50              push    eax
00467181    8AE0            mov     ah, al
00467183    0E              push    cs
00467184    0B0B            or      ecx, dword ptr ds:[ebx]
00467186    0B80 989F020B   or      eax, dword ptr ds:[eax+B029F98]
0046718C    0B58 9B         or      ebx, dword ptr ds:[eax-65]
0046718F    9B              wait
00467190    9B              wait

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
从 0046717B 执行

ret 指令行为:

1、eip  <==  dword ptr [esp]

2、goto eip
2009-12-12 11:03
0
雪    币: 49
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是说两种情况么  搞出三种?
RET 就是出栈  跳转到出栈地址
2009-12-12 14:39
0
游客
登录 | 注册 方可回帖
返回
//