我试图使用 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)