· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› SoftIce: BPX на все процессы

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Июл 8, 2003 19:54:01

Проблема вот в чем: есть процесс A (A.exe), который импортирует ф-цию X из библиотеки D.dll. Этот процесс A запускает процесс B (B.exe), который тоже импортирует X из D.dll.
Если перед запуском A в SoftIce установить брейкпоинт bpx d.x, то поймается только вызов из A. Вопрос : как сделать, чтобы ловилось везде(команда MOD D отобразит две загруженные библиотеки по разным адресам и с одинаковым путем).
И еще, как поставить брейкпоинт не используя экспортные имена (обычно когда работает целевая программа и нажимаешь CTRL-D вываливаешься в левый процесс типа KERNEL32 и просьба типа U adr будет указывать не на ту область памяти, которую надо. Как узнать селект для своей проги и соотв правильно набрать команду U или команду BPX)

Заранее спасибо, Илья

ЗЫ: Если чего неясно выразил, пишите.


Дата: Июл 8, 2003 20:31:02

Интересный вопрос. Тут же навстречу - какая ось? Если 9x - это одно, если 2k+ - это другое. Команда bpx контекстно чувствительная. Это значит, что она имеет смысл только в рамках 4-х гигабайтного виртуального пространства процесса. Черт, жаль под рукой мануала на софт-айс нет! Глянь туда, там много чего полезного написано! Так вот, продолжаем. Для 9x верхние два гига шарились между всеми, поэтому любые бряки на dll немедленно становились общими. В Windows2k же в контексте процесса bpx будет принадлежать только ему. Даже если ты зашарашишь ее на верхние 2 гига, т.к. они теперь принадлежат только самому процессу. Блин, надеюсь, нигде не сбрехал. Поправьте меня, если что не так. Теперь сижу и думаю, что будет, если я нажму Ctrl+D и поставлю бряк на что-нибудь, например на GetProcAddress. В каком контексте будет бряк? Черт, и сайса под рукой нет. Словом, надо мне самому доки почитать :(


Дата: Июл 8, 2003 20:36:21

Извините, что соазу не сказал про ось.
Сия проблемс не раз возникала с несистемными dll под 9x.
Доки к сожалению под рукой нет. Если есть линк, то плииз.

Заранее спасибо.


Дата: Июл 8, 2003 20:42:12

Ща буду ругаться! ВСЕГДА ПРОСМАТРИВАТЬ ФОРУМ НА ПРЕДМЕТ АНАЛОГИЧНЫХ СООБЩЕНИЙ. Доки обсуждали здесь:
http://www.wasm.ru/forum/index.php?action=vthread&forum=5&topic=1745

Хотя bpx на несистемную dll даже под примаханой 9x... Она ж загрузится в нижние 2 гига, насколько я соображаю, т.е. бряк опять-таки будет контекстным. Честно говоря, вообще не думаю, что это возможно даже теоретически, т.к. невозможно предсказать адрес этой же API-функции в "параллельном" адресном пространстве. Разве что специальную программу писать, которая бы искала при помощи GetProcAddress во всех параллельных виртуальных пространствах адрес функции и ставила бряк на начало. Очень надеюсь, что я не сильно набрехал в этом абзаце, и в том, что повыше. А так, вопрос классный!


Дата: Июл 8, 2003 20:48:52

А Есть ли возможность в SoftIce насильно переключиться в другой процесс; или только команда task существует?


Дата: Июл 8, 2003 21:10:54

RTFM!!!
addr


Дата: Июл 8, 2003 21:12:33

Может с помощью ее можно решить этот вопрос?


Дата: Июл 8, 2003 21:19:57

Может...

addr A
bpx symbol
addr B
bpx symbol

Только напиши, пожалуйста, сюда же о результатах. Это будет интересно!


Дата: Июл 8, 2003 21:53:46

[ volodya: В Windows2k же в контексте процесса bpx будет принадлежать только ему. Даже если ты зашарашишь ее на верхние 2 гига, т.к. они теперь принадлежат только самому процессу. Блин, надеюсь, нигде не сбрехал. Поправьте меня, если что не так. ]

Сбрехал, но чуть-чуть - про загрузку в верхние 2 гига. Это уже типа kernel mode и длл туда загрузить не получится.


[ volodya: Теперь сижу и думаю, что будет, если я нажму Ctrl+D и поставлю бряк на что-нибудь, например на GetProcAddress. В каком контексте будет бряк? ]

Айс на все контексты сразу ставит.


А вышеприведенный пример addr/bpx работать не будет, т.к. в айсе нельзя поставить два бряка на один и тот же адрес.

Peshuha, забей 0CCh на нужный тебе адрес, запомни что там было и в айсе i3here on. Когда трапнешся восстанови и отмотай eip на 1 назад.


Дата: Июл 8, 2003 22:12:32 · Поправил: volodya

А вышеприведенный пример addr/bpx работать не будет, т.к. в айсе нельзя поставить два бряка на один и тот же адрес

Привет. Спасибо, что прояснил. А ты уверен? Адрес-то может и не быть одним и тем же! Пространства-то разные!

Айс на все контексты сразу ставит
В каком случае? Для 2k?


Дата: Июл 8, 2003 23:48:08 · Поправил: Four-F

[ volodya: А ты уверен? Адрес-то может и не быть одним и тем же! Пространства-то разные! ]

Если это одна и та же длл и будет мапиться по своему preffered image base, то уверен. Хоть пространства и разные, но виртуальный адрес один и тот же, а айс не ставит бряк два раза на тот же адрес. Если ребейс будет, то тогда конечно адреса будут разные и бряки поставятся.


[ volodya: В каком случае? Для 2k? ]

Да. По крайней мере для сивтемных длл это так. А в w9x это как бы автоматом выйдет, они же разделяются.


Дата: Июл 9, 2003 09:28:06 · Поправил: Peshuha

Попробовал еще раз. Вот что получилось:
Допустим тек процесс A, команда mod выводит:
dddd 10000000 d c:\....\d.dll
DDDD 00055000 d c:\....\d.dll
команда bpx d.x проходит успешно, но bl выводит:
0 ssss:uuuuuuuu, т.е. число !!!
Но если сделать addr B|bl, то выведет:
0 d.x
Самое интересное, что заранее никогда не предугадать что выведет в первый раз.

Кстати, addr A|bpx d.x|add B|bpx d.x никаких результатов не дал.


Дата: Июл 9, 2003 18:04:27

А попонятнее?


Дата: Июл 9, 2003 18:15:32

Peshuha, вот уже спрашивали с пол года назад.

http://www.wasm.ru/forum/index.php?action=vthread&forum=5&topic=1013&p age=0#2


Дата: Июл 9, 2003 19:25:42 · Поправил: Peshuha

Спасибо за линк. Про прерывание понял уже давно.
Но вот что-то я не понял почему забитие CC на точке входа должно решить данную проблему? Потому что, как я уже сказал, при постановке bpx d.x он поставится. Только отображаться адрес в символьном виде будет только в одном процессе. И брейк тогда сработает только в одном. Может я не прав? (пока не пробовал с "CC").

По идее требуется либо заставить загрузить копию d.dll как map (чтобы получилась одна), либо ?...

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078