Ручная установка точек останова в WinDBG

Я пытаюсь проверить сборку на наличие исполняемого файла с помощью 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)

7
задан Community 23 May 2017 в 10:30
поделиться