windows - nt!KiSystemCall64 中的断点设置不起作用

标签 windows debugging kernel

我想深入研究 ntdll!NtQueueApcThread,看看在执行系统调用指令后会发生什么。根据文档(Intel® 64 and IA-32 Architectures Software Developer's Manual),系统调用指令使用msr的LSTAR(0xC0000082)作为rip,所以我在nt!KiSystemCall64设置断点,这是我通过“rdmsr c0000082”。但它不起作用,我的调试器没有中断。看来syscall inst并没有跳转到msr中存储的地址。

这是我所做的:

0: kd> 
ntdll!NtQueueApcThread+0x10:
0033:00007ffb`3c32c640 7503            jne     ntdll!NtQueueApcThread+0x15 (00007ffb`3c32c645)
0: kd> 
ntdll!NtQueueApcThread+0x12:
0033:00007ffb`3c32c642 0f05            syscall
0: kd> rdmsr c0000082
msr[c0000082] = fffff802`3681e6c0
0: kd> u fffff802`3681e6c0
nt!KiSystemCall64:
fffff802`3681e6c0 0f01f8          swapgs
fffff802`3681e6c3 654889242510000000 mov   qword ptr gs:[10h],rsp
fffff802`3681e6cc 65488b2425a8010000 mov   rsp,qword ptr gs:[1A8h]
fffff802`3681e6d5 6a2b            push    2Bh
fffff802`3681e6d7 65ff342510000000 push    qword ptr gs:[10h]
fffff802`3681e6df 4153            push    r11
fffff802`3681e6e1 6a33            push    33h
fffff802`3681e6e3 51              push    rcx
0: kd> bp ffff802`3681e6c0
0: kd> t
ntdll!NtQueueApcThread+0x14:
0033:00007ffb`3c32c644 c3              ret

目标系统版本为Windows10 build 19042

最佳答案

经过几天的研究,我知道问题出在哪里了。在正常情况下,在nt!KiSystemCall64 中设置断点会导致蓝屏,这是因为nt!KiSystemCall64 中的前三个指令是设置内核堆栈,这是windows 内核调试机制所需要的。所以解决方案是在设置内核堆栈后设置断点

bp nt!KiSystemCall64+0x15

在我的情况下,设置断点没有任何反应,好像断点不起作用,我猜是由于我安装的杀毒软件,它可能挂了一些东西。卸载后,断点生效。

关于windows - nt!KiSystemCall64 中的断点设置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65367333/

相关文章:

windows - 为什么我的用户的下载在 IE 中随机停止?

python - 创建 Windows 10 桌面快捷方式以在 venv 虚拟环境中运行 python 脚本

wpf - 如何调试WPF vb.NET App崩溃?

mysql - 找出查询是一个进程,了解它的 PID

c - 测量内核 2.4.37 中的时间流逝

linux-kernel - 编译器/链接器如何解析内核 API,例如从 linux 上的模块调用的 'printk'

linux - 在基于 SMP 的 linux 系统中访问另一个 cpu 的 "current_task"指针

c# - 图形 DrawImage 导致带有大红色 X 的错误

c# - 如何调试自定义 Windows 服务的安装?

python - 使用 python 的 win32print 模块打印 PDF 文档?