WinDBG不会在进程入口点停止

时间:2013-09-30 16:16:21

标签: assembly windbg

我正在尝试使用WinDBG并在ASM中编写一个简单的hello世界(在Windows XP上运行)。

现在我有点惊讶,当我运行它时,当我加载进程时,WinDBG总是在ntdll中停止:

ntdll!DbgBreakPoint:
7c90120e cc              int     3
7c90120f c3              ret

通常我会期望调试器在新进程的第一条指令处停止,而不是在内核中的某处。现在我可以使用:

bp start

其中start是我的切入点。但我必须手动完成这项工作。有没有办法指示WinDBG它应该在我的程序中开始调试而不是其他的?为什么不自动执行此操作?我也注意到了GDB中的相同行为,但至少GDB自动似乎在main()中设置了一个breakpint(至少对于C程序)。

2 个答案:

答案 0 :(得分:1)

当Windows中的调试器启动时,程序不会在入口点停止,而是在入口点之前执行的系统DLL中的启动代码处停止!

(但是,调试器首先停在DbgBreakPoint上,这是不常见的!)

当您停止已经运行的进程时,会创建一个调用DbgBreakPoint的新线程。调试器比在该地址停止。

答案 1 :(得分:1)

您的workspace应该保存您的断点,这样您下次就不需要输入它了。

我能想到达到你想要的唯一方法是在启动windbg时传递一个命令行参数:

windbg -g "C:\myApp\myapp.exe"

这告诉windbg忽略ntdll中的初始断点,然后它应该在start中击中断点。