assembly - WinDBG 不会在进程入口点停止

标签 assembly windbg

我正在尝试使用 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/

相关文章:

assembly - 从x86-64打印 float 似乎需要保存%rbp

assembly - 为 x86 程序集绘制堆栈框架

crash - 如何在 Windbg 中找到应用程序崩溃的根本原因?

c - 条件移动优化是否针对 C 标准?

linux - x86-64 架构上的 gnu 汇编 RET 指令失败

linux - 从命令行创建文件

c# - 看到很多 clr!CLRSemaphore::Wait in call stack

.net - WinDbg内存分析

.net - 如何在调试期间找到实现给定接口(interface)的所有类型实例

windbg - 找不到...转储文件,Win32 错误 0n87