Windbg永远不会进入正在调试的进程

时间:2014-03-22 19:31:06

标签: windbg

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

这里的例子是地址:

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(Step into)查看正在执行的每条指令。根据我的注意,Windbg从未显示Hello World.exe的说明,即使它确实执行了它。

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

1 个答案:

答案 0 :(得分:2)

如果你开始单步执行Open Executable,你将有一个“很长的路要走”,因为它在windows代码中启动。 使用X命令查找主地址,名称可能会有所不同,具体取决于您用来制作程序的工具,但请尝试使用通配符 * main *

你可以在你的程序中设置一个中断并输入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

这里我在SimpleCrash主函数中,可以将堆栈观察到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