информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяСтрашный баг в WindowsSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 HP закрыла 16-летнюю уязвимость... 
 Microsoft советует пользователям... 
 MS Edge обогнал FireFox 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / operating systems
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ну фрейм вызвавшей процедуры убит не будет 20.04.05 12:59  Число просмотров: 1840
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Ну хорошо, я поставлю бряк на вывод месаги "это не родной
> кернел", но, по скольку это фатальная ошибка, вызов
> подпрограммы печати наверняка убивает стек. Тогда, как
> отловить, откуда вызвали?

Если ntldr скомпилирован с FPO (на счастье это у микрософта - очень редко), то только долгой и нудной трассировкой. Если же нет, то пробежаться по фреймам (базовый адрес текущего фрейма - в ebp)

Фрейм создается командами

push ebp
mov ebp, esp
sub esp, FRAME_SIZE

---

и удаляется

mov esp, ebp
pop ebp

---

Таким образом, если даже нет команды прохода по стеку можно сделать это вручную:
[ebp + 4] - адрес возврата
[ebp] - базовый адрес следующего фрейма
[ebp - N] - локальные переменные (N >= 0)
[ebp + 8 + N] - аргументы, переданные в функцию (N >= 0)

Все команды прохода по стеку ориентируются именно на такую структуру стека. Если же включен FPO (ebp это как раз и есть тот frame pointer, который omission), то все локальные переменные и аргументы адресуются относительно текущего esp (в любой момент времени компилятор знает его смещение относительно фрейма) и никакой информации о размере фрейма (базовом адресе предыдущего фрейма) не хранится и узнать его можно только трассировкой до выхода из функции.

> Искать чтение файла Ntoskrnl? Но для этого нужно раскрутить
> весь "РЕ-шный" Нтлоадер. Поставить бряку на чтение строчки
> Ntoskrnl.ехе?

А вообще, я еще не пробовал, но если вырезать PE-шную часть ntldr-а и к ней действительно есть символы, то натравив на это дело IDA можно даже не ковыряться в отладчике - по дизассембингу все будет понятно
<operating systems>
У какой виртуалки самый удобный отладчик? 15.04.05 13:08  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Задача - отладка ntldr. Жизненно необходимы возможности поиска строки в физ. памяти, брейкпойнта на обращение к ячейке физ. памяти. Желательо - поиск точки вызова подпрограммы в т.ч. и межконтекстного. Идеалом считаю интерфейс Сайса.

Кто че посоветует?
Виртуалок со встроенными отладчиками знаю всего две 18.04.05 12:41  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
bochs и Virtutech Simics

Их стандартные средства отладки - тихий ужас, но bochs умеет открывать дебагпорт для gdb (а для самого gdb есть фронтэнды), а simics вообще имеет встроенный интерпретатор python-а и весьма гибкий программный интерфейс. Хотя simics еще тормознутее bochs-а и гораздо геморройнее конфигурируется (плата за возможность ОЧЕНЬ гибкого конфигурирования)

Интерфейса не найдешь. Поиск по физ памяти (кажется) и брыкпойнты на доступ (точно) есть как в одном так и в другом. Что такое "поиск точки вызова подпрограммы" я не понял
Ну, типа F10 в Сайсе 19.04.05 04:11  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
> Что такое "поиск точки вызова подпрограммы" я не
> понял

Нажал и пропустив остаток подпрограммы выскакиваешь прямо в вызвавший ее код.
А-а-а. Ну этого добра тоже полно, насколько я помню 19.04.05 16:12  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Нажал и пропустив остаток подпрограммы выскакиваешь прямо в
> вызвавший ее код.
Просто осторожно надо к этому относится. Потому как те же __fastcall вызовы без локальных переменных (и такие бывают) ни фига не оставляют фрейма на стеке и вернуться в них невозможно. Есть еще такая хрень как FPO (frame pointer omission) - этот хоть фреймы и создает, но на ebp это никак не сказывается и отследить стек невозможно
Дык, в том то и проблема, за какое место его хватать... 20.04.05 04:27  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Ну хорошо, я поставлю бряк на вывод месаги "это не родной кернел", но, по скольку это фатальная ошибка, вызов подпрограммы печати наверняка убивает стек. Тогда, как отловить, откуда вызвали?
Искать чтение файла Ntoskrnl? Но для этого нужно раскрутить весь "РЕ-шный" Нтлоадер. Поставить бряку на чтение строчки Ntoskrnl.ехе?
Ну фрейм вызвавшей процедуры убит не будет 20.04.05 12:59  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Ну хорошо, я поставлю бряк на вывод месаги "это не родной
> кернел", но, по скольку это фатальная ошибка, вызов
> подпрограммы печати наверняка убивает стек. Тогда, как
> отловить, откуда вызвали?

Если ntldr скомпилирован с FPO (на счастье это у микрософта - очень редко), то только долгой и нудной трассировкой. Если же нет, то пробежаться по фреймам (базовый адрес текущего фрейма - в ebp)

Фрейм создается командами

push ebp
mov ebp, esp
sub esp, FRAME_SIZE

---

и удаляется

mov esp, ebp
pop ebp

---

Таким образом, если даже нет команды прохода по стеку можно сделать это вручную:
[ebp + 4] - адрес возврата
[ebp] - базовый адрес следующего фрейма
[ebp - N] - локальные переменные (N >= 0)
[ebp + 8 + N] - аргументы, переданные в функцию (N >= 0)

Все команды прохода по стеку ориентируются именно на такую структуру стека. Если же включен FPO (ebp это как раз и есть тот frame pointer, который omission), то все локальные переменные и аргументы адресуются относительно текущего esp (в любой момент времени компилятор знает его смещение относительно фрейма) и никакой информации о размере фрейма (базовом адресе предыдущего фрейма) не хранится и узнать его можно только трассировкой до выхода из функции.

> Искать чтение файла Ntoskrnl? Но для этого нужно раскрутить
> весь "РЕ-шный" Нтлоадер. Поставить бряку на чтение строчки
> Ntoskrnl.ехе?

А вообще, я еще не пробовал, но если вырезать PE-шную часть ntldr-а и к ней действительно есть символы, то натравив на это дело IDA можно даже не ковыряться в отладчике - по дизассембингу все будет понятно
ХР-шный декомпилится, 2л-шный - нет 20.04.05 13:34  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Я же писал, у меня есть декомпилер круче IDA, писнный моим завлабом. Жаль, что поделиться с другими я его уговорить не могу: просто так отдать - жабно, продавать - гиморно.
А чем оно круче IDA :)? 16.05.05 19:15  
Автор: AlexD <Alexander> Статус: Member
<"чистая" ссылка>
А выложить на sf.net и получать донейшны? 20.04.05 14:26  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Попробую уболтать... 21.04.05 03:53  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
qemu -- те-же яйца с gdb, но сделано imho лучше чем в bochs 19.04.05 02:54  
Автор: dvh Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2021 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach