首页
社区
课程
招聘
[旧帖] [求助]Add指令能当Jmp使吗? 0.00雪花
发表于: 2011-5-26 17:16 3613

[旧帖] [求助]Add指令能当Jmp使吗? 0.00雪花

2011-5-26 17:16
3613
看windows高级调试时有个问题一直没想清楚,下面是5.2.2节的那个程序发生异常后,用windbg查看 eip
0:000> u eip
002c63d1 006100          add     byte ptr [ecx],ah  //ah=0
002c63d4 6c              ins     byte ptr es:[edi],dx
002c63d5 007500          add     byte ptr [ebp],dh
002c63d8 650032          add     byte ptr gs:[edx],dh
002c63db 0000            add     byte ptr [eax],al
002c63dd 00adba0df0ad    add     byte ptr [ebp-520FF246h],ch
002c63e3 ba0df0adba      mov     edx,0BAADF00Dh
002c63e8 0df0adba0d      or      eax,0DBAADF0h

0:000> recx
ecx=7c802413

0:000> u 7c802413
kernel32!SleepEx+0x8a:
7c802413 c20800          ret     8
7c802416 8975d8          mov     dword ptr [ebp-28h],esi
7c802419 c745dc00000080  mov     dword ptr [ebp-24h],80000000h
7c802420 8d45d8          lea     eax,[ebp-28h]
7c802423 8945e4          mov     dword ptr [ebp-1Ch],eax
7c802426 ebbd            jmp     kernel32!SleepEx+0x55 (7c8023e5)
7c802428 3d01010000      cmp     eax,101h
7c80242d 75ca            jne     kernel32!SleepEx+0x70 (7c8023f9)

按书上的意思这里跳到了7c802413执行了ret导致指令指针指向了无效代码,
这里add指令怎么成了跳转指令了,求解啊?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
实际情况是,ret指令返回之后,可能由于先前堆栈的平衡出现了一些问题,返回之后的EIP并不是正确的地方,而是错误指向了其他区域,例如这里应该是指向了堆里面的什么地方。
另外当前EIP指向的地方实际上是一个Unicode字符串"alue2"前面应该还有其他字符,但是这边看不见了。
对于CPU来说,它才不管你这个字节是数据还是代码,只要能执行它就会执行,当然CPU的一些高级特性会告诉你,你试图执行一个没有"可执行"属性的内存,这时候就出异常了。
2011-5-26 17:47
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
CTRL+A试试
2011-5-26 17:49
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢miku的提示,那个是regEnum函数在栈上声明了一个数组,造成的错误,就是查看ecx寄存器,ecx正好指向了sleep的返回函数,也不知道是不是偶然。
2011-5-28 14:34
0
游客
登录 | 注册 方可回帖
返回
//