Is this broken or it it just me…
Symbols match:
0: kd> lml
start end module name
0000000077ec0000 0000000077ffb000 ntdll (pdb symbols) c:\symbols\ntdll.pdb\7ECDDF018BEF40068136BF66574633B32\ntdll.pdb
fffff80001000000 fffff80001496000 nt (pdb symbols) c:\symbols\ntkrnlmp.pdb\295F2F2B8EF54B51BEF2AF1556FB67942\ntkrnlmp.pdb
ln command shows function at fffff800010c4902 0: kd\> ln IoWriteCrashDump (fffff800010c4902) nt!IoWriteCrashDump | (fffff800010c52b0) nt!string’
Exact matches:
nt!IoWriteCrashDump =
u command agrees with ln:
0: kd> u IoWriteCrashDump
nt!IoWriteCrashDump:
fffff800010c4902 9c pushfq<br>fffff800010c4903 488bc4 mov rax,rsp
fffff800010c4906 4881ecb0010000 sub rsp,1B0h<br>fffff800010c490d 488958f8 mov qword ptr [rax-8],rbx
fffff800010c4911 488968f0 mov qword ptr [rax-10h],rbp<br>fffff800010c4915 488970e8 mov qword ptr [rax-18h],rsi
fffff800010c4919 488978e0 mov qword ptr [rax-20h],rdi<br>fffff800010c491d 4c8960d8 mov qword ptr [rax-28h],r12
uf command shows different address:
0: kd> uf IoWriteCrashDump
nt!IoWriteCrashDump:
fffff800010c4900 8bc0 mov eax,eax<br>fffff800010c4902 9c pushfq
fffff800010c4903 488bc4 mov rax,rsp<br>fffff800010c4906 4881ecb0010000 sub rsp,1B0h
fffff800010c490d 488958f8 mov qword ptr [rax-8],rbx<br>fffff800010c4911 488968f0 mov qword ptr [rax-10h],rbp
fffff800010c4915 488970e8 mov qword ptr [rax-18h],rsi<br>fffff800010c4919 488978e0 mov qword ptr [rax-20h],rdi
fffff800010c491d 4c8960d8 mov qword ptr [rax-28h],r12<br>fffff800010c4921 4c8968d0 mov qword ptr [rax-30h],r13
fffff800010c4925 33f6 xor esi,esi<br>fffff800010c4927 4c8978c0 mov qword ptr [rax-40h],r15
fffff800010c492b 498be9 mov rbp,r9<br>fffff800010c492e 403835fb751100 cmp byte ptr [nt!KdDebuggerEnabled (fffff800`011dbf30)],sil
fffff800`010c4935 4d8be0 mov r12,r8
fffff800`010c4938 4c8bea mov r13,rdx
fffff800`010c493b 448bf9 mov r15d,ecx
fffff800`010c493e 0f848c000000 je nt!IoWriteCrashDump+0xcf (fffff800`010c49d0)
nt!IoWriteCrashDump+0x43:
fffff800`010c4944 32db xor bl,bl
fffff800`010c4946 fa cli
fffff800`010c4947 8bbc24b0010000 mov edi,dword ptr [rsp+1B0h]
fffff800`010c494e c1ef09 shr edi,9
fffff800`010c4951 4080e701 and dil,1
fffff800`010c4955 381de1751100 cmp byte ptr [nt!KdpContext+0x4 (fffff800`011dbf3c)],bl
fffff800`010c495b 7412 je nt!IoWriteCrashDump+0x6e (fffff800`010c496f)
nt!IoWriteCrashDump+0x5c:
fffff800`010c495d c60546b10f0001 mov byte ptr [nt!KdpControlCPressed (fffff800`011bfaaa)],1
…etc…
Notice that the offset shown, above is inconsisten with both opinions about the function base:
nt!IoWriteCrashDump+0x43:
fffff800`010c4944 32db xor bl,bl
That is fffff800`010c4944 - fffff800`010c4902 = 42
and fffff800`010c4944 - fffff800`010c4900 = 44
And if you try to use it to set a breakpoint, it ends up at the wrong place:
0: kd> bp nt!IoWriteCrashDump+0x43
0: kd> bl
0 e fffff800`010c4945 0001 (0001) nt!IoWriteCrashDump+0x44
I first hit this a few releases back and I figured it would get fixed pretty quickily since the uf command is otherwise so useful. But here it is in 6.11.1.404.
Am I missing sometrhing?
Thanks,
Rex