Я пытаюсь проверить сборку на наличие исполняемого файла с помощью WinDBG, но мне трудно это сделать. Я хочу установить точку останова на первой инструкции в моей программе, но когда я пытаюсь сделать это вручную (используя адрес модуля), WinDBG сообщает мне, что «невозможно вставить точку останова» в этом месте из-за « Неверный доступ к ячейке памяти."
Я заметил, что когда я создаю точку останова через графический интерфейс исходного кода, адрес не совпадает с адресом первой части моего модуля (в моем примере: «Win32FileOpen», простая программа, которую я написал.) Есть ли заголовок какой-то, который требует добавления смещения к адресу моего модуля?
В другом вопросея увидел предложение: «Я бы попытался вычислить адрес точки останова как: начало модуля + начало кода + смещение кода», но не знал, где получить эти значения. Может кто-нибудь уточнить это?
Причина, по которой я не использую исходный графический интерфейс, заключается в том, что я хочу иметь возможность делать это с программой, для которой у меня может не быть исходного кода/символов.
Если есть более простой способ немедленно начать работу с исполняемым файлом, который я открываю, сообщите мне об этом. (например, открытие .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)