Windbg从不进入正在调试的进程

Windbg从不进入正在调试的进程,windbg,Windbg,我有一个Windbg(x86)的新副本,并编写了一个简单的helloworld程序来测试调试器。加载可执行文件或附加进程时出现问题,调试器从不进入进程 例如,以下是地址: ModLoad: 013c0000 013c6000 Hello World.exe ModLoad: 76eb0000 77030000 ntdll.dll ModLoad: 75ab0000 75bc0000 C:\Windows\syswow64\kernel32.dll ModLoad: 74d60000

我有一个Windbg(x86)的新副本,并编写了一个简单的helloworld程序来测试调试器。加载可执行文件或附加进程时出现问题,调试器从不进入进程

例如,以下是地址:

ModLoad: 013c0000 013c6000   Hello World.exe
ModLoad: 76eb0000 77030000   ntdll.dll
ModLoad: 75ab0000 75bc0000   C:\Windows\syswow64\kernel32.dll
ModLoad: 74d60000 74da7000   C:\Windows\syswow64\KERNELBASE.dll
ModLoad: 70980000 70a6e000   C:\Windows\SysWOW64\MSVCR120.dll
加载进程后,我逐步执行F11(单步执行),以查看正在执行的每条指令。据我所知,Windbg从未显示Hello World.exe的指令,即使它确实执行了它


问题可能是什么?我将如何着手解决它?

如果您开始单步打开可执行文件,您将有一段“漫长的路要走”,因为它是从windows代码内部开始的。 使用X命令查找主地址,名称可能会有所不同,具体取决于制作程序所使用的工具,但请尝试使用通配符*main*

您可以在程序的main中设置一个break,然后输入g(go),从这里您可以逐步了解您的代码。这是我的SimpleCrash.exe的一个示例

000> x SimpleCrash!*main*
*** WARNING: Unable to verify checksum for SimpleCrash.exe
011e8020 SimpleCrash!__native_dllmain_reason = 0xffffffff
011e8138 SimpleCrash!mainret = 0n0
011e1a00 SimpleCrash!wmain (int, wchar_t **)
0:000> bp 011e1a00 
0:000> g
Breakpoint 0 hit
eax=00419ed8 ebx=7efde000 ecx=00417f10 edx=00000001 esi=00000000 edi=00000000
eip=011e1a00 esp=0030f9dc ebp=0030fa28 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
SimpleCrash!wmain:
011e1a00 55              push    ebp
在这里,我使用SimpleCash主函数,可以观察windows代码中的堆栈

0:000> k
ChildEBP RetAddr  
0030f9d8 011e1959 SimpleCrash!wmain 
0030fa28 011e1b4d SimpleCrash!__tmainCRTStartup+0x199 [f:\dd\vctools\crt_bld\s
0030fa30 7548336a SimpleCrash!wmainCRTStartup+0xd [f:\dd\vctools\crt_bld\self_
0030fa3c 77859f72 kernel32!BaseThreadInitThunk+0xe
0030fa7c 77859f45 ntdll!__RtlUserThreadStart+0x70
0030fa94 00000000 ntdll!_RtlUserThreadStart+0x1b

这是可行的,但为什么当我从一开始单步执行时,我从未到达main?@drum你会的,但正如答案所述,在运行
main
之前,需要运行很多前导代码。正如我在我的OP中所述,我确实一步一步地执行了每一条指令,但从未到达main,但main仍在执行。我能单步执行的唯一代码是ntdll!。