|
|
| Посл.отвђт | Сообщен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 (чтобы получилась одна), либо ?... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078 |