ARM64 的 TEB 表示,xpr 寄存器

问题描述 投票:0回答:1

我正在尝试使用 Windows 11 的 ARM 版本来找出 ARM64 架构。我可以看到 KeGetCurrentIrql 函数转换为:

ldrb    w0, [xpr, #0x38]
ret

如果我理解正确的话,

xpr
寄存器是
x18
,因此
ldrb
指令从
x18
寄存器获取的内存地址读取一个字节,加上
0x38
偏移量。

因此,当我在

ldrb
指令上触发断点时,我在 WinDbg 中尝试以下操作:

kd> r x18
x18=0000000000000000

但是怎么可能,

x18
是0呢? TEB 不能为 0。我错过了什么?

如果我这样做:

kd> !teb
TEB at 0000003d7af95000
...
assembly windbg arm64 windows-kernel
1个回答
0
投票

x18 在用户模式下指向 TEB,在内核模式下指向 KPCR。

一年多前我也看到过这种行为,就我而言,这是 WinDbg 中的一个错误,我通过编写一个驱动程序来输出 x18 的实际值来验证这实际上是一个错误。

您可以通过使用参数为 18 的 __getReg 内在函数来做到这一点,如下所示:

无符号长长 x18 = __getReg(18);

© www.soinside.com 2019 - 2024. All rights reserved.