Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

CPU架构

帖子发起人: merry   发起时间: 2009-03-28 21:04 下午   回复: 1

Print Search
帖子排序:    
   2009-03-28, 21:04 下午
merryzhao 离线,最后访问时间: 2017/2/21 12:41:06 merry

发帖数前25位
注册: 2008-09-26
发 贴: 61
指令SYSENTER是否使用SYSENTER_ESP_MSR寄存器
Reply Quote

     IA-32架构中的快速系统调用指令SYSENTER在Windows SP2上执行时,是否仅使用SYSENTER_CS_MSR和SYSENTER_EIP_MSR,没有使用SYSENTER_ESP_MSR

    因为我在反汇编看到系统服务号放入EAX寄存器后,esp存入edx,通过edx就找到用户传入参数,好像没有使用SYSENTER_ESP_MSR。

请问情况是这样吗?

 


IP 地址: 已记录   报告
   2009-03-28, 23:07 下午
MJ0011 离线,最后访问时间: 2009/12/24 22:33:41 MJ0011

发帖数前10位
注册: 2008-04-24
发 贴: 112
Re: 指令SYSENTER是否使用SYSENTER_ESP_MSR寄存器
Reply Quote
当然会使用了,否则堆栈怎么切换过去?否则为什么要通过EDX来让内核知道用户栈在哪里?否则为什么需要在call ebx(system service routine)前做堆栈参数COPY?

参考代码:

mov esi, edx ; (esi)->User arguments
mov ebx, [edi]+SdNumber ; get argument table address
xor ecx, ecx
mov cl, byte ptr [ebx+eax] ; (ecx) = argument size
mov edi, [edi]+SdBase ; get service table address
mov ebx, [edi+eax*4] ; (ebx)-> service routine
sub esp, ecx ; allocate space for arguments
shr ecx, 2 ; (ecx) = number of argument DWORDs
mov edi, esp ; (edi)->location to receive 1st arg
cmp esi, _MmUserProbeAddress ; check if user address
jae kss80 ; if ae, then not user address

KiSystemServiceCopyArguments:
rep movsd ; copy the arguments to top of stack.
; Since we usually copy more than 3
; arguments. rep movsd is faster than
; mov instructions.
IP 地址: 已记录   报告
高端调试 » 系统架构 » CPU架构 » Re: 指令SYSENTER是否使用SYSENTER_ESP_MSR寄存器

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.