English 中文(简体)
在 WinDBG 中手动设置断点
原标题:Manually setting breakpoints in WinDBG

我试图使用 WinDBG 来检查一个可执行文件的组装, 但我很难找到它。 我想在我的程序的第一个指令上设置一个断点, 但是当我试图手工操作时( 使用模块的地址) WinDBG 告诉我, “ 无法在该位置插入断点 ”, 因为“ 无法有效访问内存位置 ” 。

我注意到,当我在源代码 GUI 中创建断点时, 地址与我的模块的第一部分不同( 例如: Win32File Open, 我写的简单程序 。) 是否有某种标题需要为我的模块的地址添加一个偏移?

在另一个 < a href=" https://stackoverflow.com/ questions/1503/670/in-windbg-can-use- software-breakpoints- non-having-symbols > question 中,我看到一个建议:“我试图计算断点地址为:模块启动+代码启动+代码抵消”,但不确定在哪里获得这些价值。有人能详细解释一下吗?

我之所以不只使用源代码 GUI 是因为我想用一个程序来完成这个程序, 我可能没有源代码/符号。

如果有比较容易的方法可以立即开始使用我打开的可执行文件,请告诉我。 (例如,打开 exe Olly 立即向我展示该可执行文件的组装.exe, 搜索引用的字符串会给我该模块的结果等等。 WinDBG 似乎让我在 ntell.dll 开始工作, 这通常对我没有用处 。 )

0:000> lm
start             end                 module name
00000000`00130000 00000000`0014b000   Win32FileOpen C (private pdb symbols)  C:cfinleycodeWin32FileOpenDebugWin32FileOpen.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:symbolsmssymbols
tdll.pdb15EB43E23B12409C84E3CC7635BAF5A32
tdll.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)
最佳回答

您应该能够使用下列方式列出您的字串的所有切入点:

x myDLL!*

你应当警告众人,这确是列出一切事物的。

如果您想要 Win32File Open :

x myDLL!*Win32FileOpen*

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

您关于偏移的其他问题, 您可以在方法名称或地址上设置一个断点, 并添加一个偏移 :

bp myDLL!Win32FileOpen+0xa

如果您打开了可显示的显示点, 它将会立即调试破碎, 并且可能不会开始装入您的标记, 如果这是一个问题, 那么您就可以设置未解决的断点 :

bu myDLL!Win32FileOpen

或仅在程序启动时附加,列出字符串,然后设置断点。

您也可以考虑在源线上设置断点 :

bp `myDLL!mySourceFile.cpp:XXX` 

XXX 是行号, 注意您必须使用严肃的口音来标记源线, 希望这有帮助 。

< 强力 > 编辑 < /强 >

刚刚找到这个链接,您可能对此感兴趣:http://mattoh.w或dpress.com/2010/08/06/metting-breakpoint-on-entry-poin- with-windbg/

其中一位评论者指出其中一张假登记簿, 允许您将 Bp 设置在您exe 的入境点上:

bp $exentry

bu @$exentry
问题回答

暂无回答




相关问题
Conditional Debug on Visual C++ 2008 Express

Is there a way to debug code on Visual C++ 2008 Express, such as I can watch a variable for certain value(s) and, when it assumes this value, to break? For instance, I want to break when xbecomes 5. ...

VS DataBreakpoints: difference between C and C++

when you set a databreakpoint in MSVS, then you put in the address and the number of bytes and finally it lets you choose betwenn "C" and "C++". this last part i dont know what it is about? what is ...

How can I trap the unknown cause of a Javascript popup?

I am debugging someone else s web page. There is a link on it which tries to open itself in a popup window, the reason for this is unclear -- there is nothing obvious in the HTML (onclick=foo) to ...

Breakpoints in Ruby IDE?

I currently use TextMate for Ruby/Javascript/Actionscript development and it is amazing. But one thing I would really love to use are breakpoints so I could stop code execution and examine the state ...

What does it mean for a breakpoint to be installed?

The documentation for Eclipse states that a blue circle icon represents an enabled line breakpoint and that a checkmark is an adornment that marks a line breakpoints as installed What s the ...

Xcode breakpoint [NSExceptionRaise] vs -[NSExceptionRaise]

Xcode:Run>Show>Breakpoints I ve added the obligatory [NSExceptionRaise] and objc_exception_throw yet when I close the Breakpoints window and then return Xcode adds a third breakpoint: -[...

热门标签