gpt4 book ai didi

windbg - 在 WinDBG 中手动设置断点

转载 作者:行者123 更新时间:2023-12-04 10:27:47 45 4
gpt4 key购买 nike

我正在尝试使用 WinDBG 检查可执行文件的程序集,但我很难找到它。我想在程序的第一条指令处设置断点,但是当我尝试手动执行此操作(使用模块的地址)时,WinDBG 告诉我它“无法在该位置插入断点”,因为“对内存位置的访问无效。”

我注意到,当我通过源代码 GUI 创建断点时,地址与模块的第一部分不同(在我的示例中:“Win32FileOpen”,我编写的一个简单程序。)是否有某种标题这需要在我的模块地址上添加一个偏移量?

在另一个 question ,我看到了建议:“我会尝试将断点地址计算为:模块开始 + 代码开始 + 代码偏移”,但不确定从哪里获得这些值。有人可以详细说明一下吗?

我不只是使用源 GUI 的原因是我希望能够使用我可能没有源/符号的程序来执行此操作。

如果有更简单的方法可以立即开始使用我打开的可执行文件,请告诉我。 (例如,打开一个 .exe Olly 会立即向我显示该 .exe 的程序集,搜索引用的字符串会为我提供该模块的结果等。WinDBG 似乎在 ntdll.dll 中让我开始,这通常对我没有用处。)

0:000> lm
start end module name
00000000`00130000 00000000`0014b000 Win32FileOpen C (private pdb symbols) C:\cfinley\code\Win32FileOpen\Debug\Win32FileOpen.pdb
00000000`73bd0000 00000000`73c2c000 wow64win (deferred)
00000000`73c30000 00000000`73c6f000 wow64 (deferred)
00000000`74fe0000 00000000`74fe8000 wow64cpu (deferred)
00000000`77750000 00000000`778f9000 ntdll (pdb symbols) c:\symbols\mssymbols\ntdll.pdb\15EB43E23B12409C84E3CC7635BAF5A32\ntdll.pdb
00000000`77930000 00000000`77ab0000 ntdll32 (deferred)
0:000> bu 00000000`00130000
0:000> bl
0 e x86 00000000`001413a0 0001 (0001) 0:**** Win32FileOpen!main <-- One that is generated via GUI
1 e x86 00000000`00130000 0001 (0001) 0:**** Win32FileOpen!__ImageBase <-- One I tried to set manually
0:000> g
Unable to insert breakpoint 1 at 00000000`00130000, Win32 error 0n998
"Invalid access to memory location."
bp1 at 00000000`00130000 failed
WaitForEvent failed
ntdll!LdrpDoDebuggerBreak+0x31:
00000000`777fcb61 eb00 jmp ntdll!LdrpDoDebuggerBreak+0x33 (00000000`777fcb63)

最佳答案

您应该能够使用以下命令列出您的 dll 的所有入口点:

x myDLL!*

但请注意,这将列出所有内容,

如果你只想要 Win32FileOpen:
x myDLL!*Win32FileOpen*

将列出所有匹配项,这将列出您可以设置断点的正确地址。

关于偏移量的其他问题,您可以在方法名称或地址上设置断点并添加偏移量:
bp myDLL!Win32FileOpen+0xa

如果您打开可执行文件,它将立即调试中断并且可能不会开始加载您的 dll,如果这是一个问题,那么您可以设置 Unresolved 断点:
bu myDLL!Win32FileOpen

或者只是在应用程序启动时附加,列出字符串然后设置断点。

您还可以考虑在源代码行设置断点:
bp `myDLL!mySourceFile.cpp:XXX` 

其中 XXX 是行号,请注意您必须使用重音符号来标记源代码行,希望这会有所帮助。

编辑

刚刚找到您可能感兴趣的链接: http://mattoh.wordpress.com/2010/08/06/setting-breakpoint-on-entry-poin-with-windbg/

还有一位评论员指出了一个伪寄存器,它允许您在 exe 的入口点设置 bp:
bp $exentry

或者
bu @$exentry

关于windbg - 在 WinDBG 中手动设置断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10759661/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com