我有一个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的说明,即使它确实执行了它。
可能是什么问题,我将如何解决它?
答案 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