我正在尝试使用 WinDBG 并在 ASM 中编写一个简单的 hello world(在 Windows XP 上运行)。
现在我有点惊讶,当我运行它时,当我加载进程时,WinDBG 总是停止在 ntdll 中:
ntdll!DbgBreakPoint:
7c90120e cc int 3
7c90120f c3 ret
通常我希望调试器停止在新进程的第一条指令处,而不是内核中的某个地方。现在我可以使用:
bp start
其中 start
是我的入口点。但我必须始终手动执行此操作。有没有什么方法可以指示 WinDBG 它应该在我的程序中开始调试,而不是在其他地方?为什么它不自动执行此操作?我也注意到 GDB 也有同样的行为,但至少 GDB 似乎自动在 main()
中设置了一个断点(至少对于 C 程序)。
最佳答案
您的workspace应保存您的断点,以便下次不需要输入它。
我认为实现你想要的唯一方法是在启动windbg时传递命令行参数:
windbg -g "C:\myApp\myapp.exe"
这告诉windbg忽略ntdll
中的初始断点,然后它应该在start
中命中断点。
关于assembly - WinDBG 不会在进程入口点停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19098993/