首页
社区
课程
招聘
[求助]sysenter指令将ring3的返回地址保存在哪里了?????
发表于: 2010-11-29 15:50 7629

[求助]sysenter指令将ring3的返回地址保存在哪里了?????

2010-11-29 15:50
7629
好像不是sysenter指令保存的,那是KifastcallEntry保存的吗?Windows是怎么找到返回地址的,不可能对每个函数都自己设置ecx来决定返回位置吧!

[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 8209
活跃值: (4528)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
2
貌似是有导出的:KiFastSystemCallRet
2010-11-29 18:09
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
ntdll!KiFastSystemCall:
7c92e510 8bd4            mov     edx,esp
7c92e512 0f34            sysenter
ntdll!KiFastSystemCallRet:
7c92e514 c3              ret

返回到KiFastSystemCallRet,然后再返回到原函数。
2010-11-29 21:10
0
雪    币: 161
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gog
4
不是返回到KiFastSystemCallRet,各个函数返回位置不一样,在sysenter位置单步后,根本就不会到他的下一条指令
2010-11-30 09:55
0
雪    币: 161
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gog
5
The SYSENTER and SYSEXIT instructions are companion instructions, but they do not constitute a call/return pair. When executing a SYSENTER instruction, the processor does not save state information for the user code, and neither the SYSENTER nor the SYSEXIT instruction supports passing parameters on the stack.
难道真没有一定的返回规则,返回ring3都是通过函数设置ecx,edx吗
2010-11-30 09:59
0
雪    币: 3134
活跃值: (1279)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
ccfer难道也是内核大牛?

算法,破解,内核都牛的人,少见啊。。。nooby和风月应该称得上,哦,还有V大。这些比较活跃,所以才知道,哈
2010-11-30 10:54
0
雪    币: 8209
活跃值: (4528)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
7
这种资料随便g一下就有的,比如
http://blog.chinaunix.net/u/19585/showart_234299.html
2010-11-30 11:31
0
雪    币: 161
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gog
8
不要说随便g下就有,肯定是g过后才能问的
lea edx,Exit
mov ecx,esp
sysenter
Exit:
你给链接是通过自己设置edx来决定返回值的,问题是windows中在KiFastcallSystemCall中并没有通过Edx传递返回地址,如
NtOpenSection
7C92D62E >/$B8 7D000000   mov     eax, 7D
7C92D633  |.  BA 0003FE7F   mov     edx, 7FFE0300
7C92D638  |.  FF12          call    dword ptr [edx];调用KiFastcallSystemCall
7C92D63A  \.  C2 0C00       retn    0C
KiFastcallSystemCall
7C92E510 >/$  8BD4          mov     edx, esp
7C92E512  |.  0F34          sysenter
7C92E514 >\$  C3            retn
sysenter单步后,返回到7C92D63A 的retn 0c,并不是返回到7C92E514
个人猜测windows内核是根据edx( mov     edx, esp)即ring3的esp,通过[edx]来取得返回地址
2010-11-30 15:03
0
雪    币: 8209
活跃值: (4528)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
9
返回你要看sysexit才行吧
sysenter是只管进入不管返回的
2010-11-30 15:18
0
雪    币: 161
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gog
10
看来还是只能去分析一sysexit附近都是些啥东西了,本想偷个懒
2010-11-30 15:52
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
你自己在ntdll!KiFastSystemCallRet下个断,看能走到那不。。。。。。

nt!KiFastCallEntry:
80542320 b923000000      mov     ecx,23h
80542325 6a30            push    30h
80542327 0fa1            pop     fs
80542329 8ed9            mov     ds,cx
8054232b 8ec1            mov     es,cx
8054232d 648b0d40000000  mov     ecx,dword ptr fs:[40h]
80542334 8b6104          mov     esp,dword ptr [ecx+4]
80542337 6a23            push    23h
80542339 52              push    edx
8054233a 9c              pushfd
8054233b 6a02            push    2
8054233d 83c208          add     edx,8
80542340 9d              popfd
80542341 804c240102      or      byte ptr [esp+1],2
80542346 6a1b            push    1Bh

80542348 ff350403dfff    push    dword ptr ds:[0FFDF0304h]
8054234e 6a00            push    0
80542350 55              push    ebp
80542351 53              push    ebx
80542352 56              push    esi

lkd> dd 0FFDF0304h
ffdf0304  7c92e514 00000000 00000000 00000000

ntdll!KiFastSystemCall:
7c92e510 8bd4            mov     edx,esp
7c92e512 0f34            sysenter
ntdll!KiFastSystemCallRet:
7c92e514 c3              ret
2010-11-30 20:22
0
雪    币: 29
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
关注!
这个问题很新颖
2010-12-3 04:00
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码