当前位置: 代码迷 >> 驱动开发 >> 快速系统调用过程中有一句汇编语句不明白,该怎么处理
  详细解决方案

快速系统调用过程中有一句汇编语句不明白,该怎么处理

热度:36   发布时间:2016-04-28 11:07:50.0
快速系统调用过程中有一句汇编语句不明白
在用户模式下调用时是
mov edx,esp
sysener 

edx指向 用户空间堆栈栈顶

然后到创建自陷框架时
nt!KiFastCallEntry:
804de89f b923000000      mov     ecx,23h
804de8a4 6a30            push    30h
804de8a6 0fa1            pop     fs    ;RING0下 FS=0x30 
804de8a8 8ed9            mov     ds,cx ;RING3下 0x20 数据段
804de8aa 8ec1            mov     es,cx ;RING3下 0x20 数据段
804de8ac 648b0d40000000  mov     ecx,dword ptr fs:[40h] ;TSS
804de8b3 8b6104          mov     esp,dword ptr [ecx+4]  
804de8b6 6a23            push    23h
804de8b8 52              push    edx
804de8b9 9c              pushfd
804de8ba 6a02            push    2
804de8bc 83c208          add     edx,8  




这句为什么是add edx,8 而不是add edx,4 ??

比如如果在函数里调用sysenter


用户空间堆栈里样子应该是
| 参数 | 高地址
| 参数 | ←add后edx指向
| 参数 |
| 返回地址 | ←mov edx,esp 后edx指向
  低地址

再 add edx,8 使edx 向高地址移动8字节 岂不是损失了一个参数?? 还是说用户空间堆栈里还有什么东西?

------解决方案--------------------
探讨
在用户模式下调用时是
mov edx,esp
sysener

edx指向 用户空间堆栈栈顶

然后到创建自陷框架时
nt!KiFastCallEntry:
804de89f b923000000 mov ecx,23h
804de8a4 6a30 push 30h
804de8a6 0fa1 pop ……
  相关解决方案