информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыВсе любят медПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / operating systems
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ну фрейм вызвавшей процедуры убит не будет 20.04.05 12:59  Число просмотров: 2058
Автор: 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> Поиск 






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


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