Эти значения являются отрицательными, поэтому вам нужно сохранить их при сдвиге битов. Например:
0: kd> dd win32k!W32pServiceTable L1
fffff88b`d1568000 ff8c8340
0: kd> u win32k!W32pServiceTable + ffffffff`fff8c834 L1
win32k!NtUserGetThreadState:
fffff88b`d14f4834 4883ec28 sub rsp,28h
Кроме того, WinDbg очень требователен / странен / сломан / непредсказуем, когда дело доходит до расширения знака, поэтому вам нужно быть осторожным в том, как вы это делаете. Например, это не работает:
0: kd> u win32k!W32pServiceTable + fff8c834 L1
fffff88c`d14f4834 ?? ???
Из-за нуля WinDbg, увеличивающего значение. Но это так:
0: kd> u win32k!W32pServiceTable + (fff8c834) L1
win32k!NtUserGetThreadState:
fffff88b`d14f4834 4883ec28 sub rsp,28h
Поскольку () заставляет WinDbg расширять знак вместо расширения ноль.
Наконец, это происходит даже на обычной служебной таблице, это не просто Win32k .