Сейчас на форуме: _MBK_, Adler (+5 невидимых)

 eXeL@B —› Вопросы новичков —› remote debugging ring 3 + ring 0
Посл.ответ Сообщение

Ранг: 2.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 апреля 2011 02:42
· Личное сообщение · #1

Хочу продебажить программу, исполняемую на виртуальной машине, с помощью remote debugging хоста. Как "идеалогически" установить breakpoint на её первой инструкции? когда я коннекчу дебаггер, он начинает дебажить ядро операционки на VM.
Если внутри программы я "натыкаюсь" на инструкцию типа sysenter, как перехватить её исполнение в ядре гостевой ОС?



Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 15 апреля 2011 13:43
· Личное сообщение · #2

#1: проще всего юзать break&enter
#2: вроде нет ничего лучше, как явно поставить bp на ядерный код и проверять, что он сработал именно в ходе работы твоей программы.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 16 апреля 2011 10:10
· Личное сообщение · #3

Какой отладчик используете?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 2.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 16 апреля 2011 10:22
· Личное сообщение · #4

Coderess пишет:
Какой отладчик используете?


Собираюсь WinDBG подконнектить к Vmware или Qemu. всё равно я не до конца понимаю, как поставить break на пользовательской программе? в дебаггере начинает исполняться ядро ОС




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 16 апреля 2011 10:28 · Поправил: Coderess
· Личное сообщение · #5

Я когда драйвер писал, ставил бряк в нем допустим в DriverEntry() потом загружал его с помощью Syser -> Loader и ловил исключение с помощью Syser'а потом уже как обычно трасировал код, плюс можно же
брейкпоинты ставить на функции IoCreateDevice(), IoCreateSymbolicLink() и уже выезжаешь к нужному коду

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes


| Сообщение посчитали полезным: DenCoder

Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 16 апреля 2011 11:03
· Личное сообщение · #6

когда пишешь драйвер для дебага, можно сразу в DriverEntry 0xCC запихнуть, а можно лоадер юзать, не обязательно сисеровский.

Для юзермода говорю же, есть проверенный тысячелетиями break&enter в PeTools/LordPE/где его только нету




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 17 апреля 2011 19:47 · Поправил: DenCoder
· Личное сообщение · #7

Для WinDbg

Если запускаем под проводником

Получаем EPROCESS
!process 0 0 explorer.exe

ставим ядерный бряк
bp /p <полученный EPROCESS> nt!NtCreateThread; g

Бряк сработал, получаем адрес точки входа
dd /c 1 @esp + 0x18 L1; dt nt!_CONTEXT Eax @@masm($p)

Получаем информацию об указанном в параметрах хендле процесса
dd /c 1 @esp + 0x10 L1; !handle @@masm($p)
Убеждаемся, что получаем правильный Type: Process. Да - берем EPROCESS нового процесса из поля Object.

В меню Edit->Breakpoints находим ранее установленный бряк и отключаем его, ОК

Дальше ставим бряк на точку входа программы
bp /p <EPROCESS нового процесса> <адрес точки входа>; g

В WinDbg предусмотрен отлов исключения при создании процесса. Только у меня не работает почему-то, может это для Kernel-mode...

-----
IZ.RU


| Сообщение посчитали полезным: _ruzmaz_


Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 18 апреля 2011 10:20
· Личное сообщение · #8

vptrlx
когда пишешь драйвер для дебага, можно сразу в DriverEntry 0xCC запихнуть, а можно лоадер юзать, не обязательно сисеровский.

Да сразу не врубился, поэтому и расказал как...

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 18 апреля 2011 16:48
· Личное сообщение · #9

Coderess и vptrlx, при чём здесь драйвер-то?

Mike247MOS пишет:
Как "идеалогически" установить breakpoint на её первой инструкции?


Mike247MOS пишет:
как поставить break на пользовательской программе?


Если задача тс поставлена четко. А вы о чём-то всё о своём... эх...

-----
IZ.RU



 eXeL@B —› Вопросы новичков —› remote debugging ring 3 + ring 0
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати