On Windows 7 x64 Sp1, I have a thread :
lkd> dt _ETHREAD 0xfffffa8007b6a7b0
nt!_ETHREAD
+0x388 StartAddress : 0x00000000`7749c500 Void
+0x410 Win32StartAddress : 0x00000000`0a54b190 Void
0:044> ln 0x00000000`7749c500
(00000000`7749c500) ntdll!RtlUserThreadStart | (00000000`7749c530) ntdll!LdrpInitializeThread
Exact matches:
ntdll!RtlUserThreadStart = <no type information>
0:044> ln 0x00000000`7749c500
(00000000`7749c500) ntdll!RtlUserThreadStart | (00000000`7749c530) ntdll!LdrpInitializeThread
Exact matches:
ntdll!RtlUserThreadStart = <no type information>
0:044> !address 0x00000000`0a54b190
Usage: <unclassified>
Allocation Base: 00000000`0a4a0000
Base Address: 00000000`0a4a1000
End Address: 00000000`0a585000
Region Size: 00000000`000e4000
Type: 00020000 MEM_PRIVATE
State: 00001000 MEM_COMMIT
Protect: 00000020 PAGE_EXECUTE_READ
Why Win32StartAddress is set to a non module address? I wanna validate if their a rogue thread in this process. How to choice between the 2?
lkd> dt _ETHREAD 0xfffffa8007b6a7b0
nt!_ETHREAD
+0x388 StartAddress : 0x00000000`7749c500 Void
+0x410 Win32StartAddress : 0x00000000`0a54b190 Void
0:044> ln 0x00000000`7749c500
(00000000`7749c500) ntdll!RtlUserThreadStart | (00000000`7749c530) ntdll!LdrpInitializeThread
Exact matches:
ntdll!RtlUserThreadStart = <no type information>
0:044> ln 0x00000000`7749c500
(00000000`7749c500) ntdll!RtlUserThreadStart | (00000000`7749c530) ntdll!LdrpInitializeThread
Exact matches:
ntdll!RtlUserThreadStart = <no type information>
0:044> !address 0x00000000`0a54b190
Usage: <unclassified>
Allocation Base: 00000000`0a4a0000
Base Address: 00000000`0a4a1000
End Address: 00000000`0a585000
Region Size: 00000000`000e4000
Type: 00020000 MEM_PRIVATE
State: 00001000 MEM_COMMIT
Protect: 00000020 PAGE_EXECUTE_READ
Why Win32StartAddress is set to a non module address? I wanna validate if their a rogue thread in this process. How to choice between the 2?