zjxiong7019
驱动牛犊
驱动牛犊
  • 注册日期2006-11-11
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分560分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
阅读:1304回复:2

当函数调用从用户栈进入内核栈的时候

楼主#
更多 发布于:2007-06-07 19:10
比如说在用户层调用了在ntdll.dll中的函数NtQueryDirectoryFile,它就会陷入中断进入内核层去调用内核层的SSDT中的同名函数,那么它在内核栈中是怎么保存返回用户层栈的地址的呢?是保存在哪个数据结构里面?怎么返回?谁能讲解一下么?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-06-08 08:26
参考指令INT 和SYSENTER(SYSCALL)的说明。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-06-11 09:27
SYSENTER 等同int2E,进入IDT2E 中断handle处理器:
保留应用层现场
用户层堆栈和核心堆栈切换,
完成service dispatch...

最后:
sysexit
退出中断,根据堆栈返回地址,返回应用层.

自己仔细跟踪一下就知道 :=)
游客

返回顶部