我运行了一个简单的winsock客户端,并将指令_asm int 3
放在了WSAStartup
之前。我在WS2_32!send
处放置一个断点,然后在g
处放置一个断点,然后看到以下调用跟踪(省略了一些部分):
ndis!NdisSendNetBufferLists
观察到00 ndis!NdisSendNetBufferLists
...
1b 80d8ff20 89617a1f ndis!ndisMiniportDpc+0xe2
1c 80d8ff48 82891f7e ndis!ndisInterruptDpc+0xaf
1d 80d8ffa4 82891de0 nt!KiExecuteAllDpcs+0xfa
1e 80d8fff4 8289157c nt!KiRetireDpcList+0xd5
1f 8c3704f4 828082af nt!KiDispatchInterrupt+0x2c
20 8c37050c 82808449 hal!HalpCheckForSoftwareInterrupt+0x83
21 8c370518 82894d91 hal!HalEndSystemInterrupt+0x67
22 8c370518 82840e8f nt!KeUpdateSystemTimeAssist+0x5d
23 8c3705c4 82b652bf nt!KeThawExecution+0x1c8
24 8c3705dc 828e64ae nt!KdExitDebugger+0x67
25 8c3705f4 82b65604 nt!KdpReport+0xd5
26 8c370620 828e4b7b nt!KdpTrap+0x102
27 8c370bc4 8286f932 nt!KiDispatchException+0x21e
28 8c370c2c 82870a3f nt!CommonDispatchException+0x4a
29 8c370c2c 766e6c1a nt!KiTrap03+0x263
2a 001efec0 00211bfe WS2_32!send+0x1
2b 001efed4 00211af1
client!__scrt_narrow_environment_policy::initialize_environment+0x2e
[f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 78]
2c 001eff2c 0021199d client!_RTC_Shutdown+0x251
[f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 283]
2d 001eff34 00211c68 client!_RTC_Shutdown+0xfd
[f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 326]
2e 001eff3c 777cefac client!mainCRTStartup+0x8
[f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp @ 17]
2f 001eff48 77673628 kernel32!BaseThreadInitThunk+0xe
30 001eff88 776735fb ntdll!__RtlUserThreadStart+0x70
31 001effa0 00000000 ntdll!_RtlUserThreadStart+0x1b
没有呼叫client!mainCRTStartup
。为什么?它不应该叫client!main
吗?
其他信息:我在Virtual Windows 7x86上使用了内核调试。 Winsock客户端和服务器位于同一虚拟机(配置为使用Bridged)中,但是如果它们位于不同的计算机上,也会出现此问题。