|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 17, 2004 23:26:49 · Поправил: Безпощадный даос Использую SoftIce и нужно поставить BP на библиотечную функцию такого вида: ?warning@QMessageBox@@HGDG... и.т.д SoftIce такие записи ни в какую принимать не хочет. Что делать как поставить на нее BP?. Заранее спасибо. |
|
|
Дата: Июн 17, 2004 23:32:39 http://frontline.compuware.com/nashua/kb/doc/13.asp This is a known issue. The problem here is that SoftICE is interpreting the "@" as an operator and not as a part of the symbol name. There is no resolution to this yet and we don't have a timeframe for when one will be available. In the meantime you can workaround this by just passing the address of the symbol to the BPX command instead of the symbol name itself. |
|
|
Дата: Июн 18, 2004 00:03:02 А вообще - это имя класса, надо разманглить и ставить на размангленое имя. Я это в FAQ напишу. |
|
|
Дата: Июн 18, 2004 10:33:21 надо разманглить - простите, это как? И еще вопрос по поводу адреса: Если я правильно понял то нужно сделать следующие: exp my_dll!warnig... - выдаст мне адреса точек входа функций а потом ставить bpx my_dll!xxxxxxxxh? Я правильно понял. P.S. В SoftIce я новичок, так что если вопросы кажутся глупыми извините. (Документацию я читал :) |
|
|
Дата: Июн 18, 2004 10:49:53 Что-то неполучается: Библиотека называется qt-mt323.dll. Функция ?warming@QMessageBox@@SAHPAW..... Делаю exp qt-mt323!warning он выдает мне адреса и список функций: 00FE:0013011E ?warming@QMessageBox@@SAHPAW..... При попытке ставить на нее bpx qt-mt323!0013011E он говорит: Symbot not defined (qt)... Где я неправ? |
|
|
Дата: Июн 18, 2004 11:31:35 · Поправил: ssx разманглить - undname.exe warning@QMessageBox@@HGDG added: хотя нет, попробовал - ничего не вышло, там манглинг другой, похоже эта dll была gcc скомпилирована |
|
|
Дата: Июн 18, 2004 12:08:10 Да нет, просто я привет не полное и не совсем точное название функции - у меня получилось, но остался открытым вопрос: как брейкпойт поставить на эту функцию в SoftIce? У меня получилось следующие: ?warning@QMessageBox@@SAHPAVQWidget@@ABVQString@@1111HH@Z == public: static int __cdecl QMessageBox::warning(class QWidget *,class QString const &,class QString const &,class QString const &,class QString const &,class QString const &,int,int). SoftIce не принимает QMessageBox - как обычно говорит символ не определен. Я как бы не совсем понял, что мне теперь делать с этим именем? Как использовать в SoftIce. Или ему как-то можно указать что функция по такому-то адресу называется вот так и имеет параметры вот такие... Поясните? И еще: как поставить BP на адрес в модуле? Что-то вроде этого BPX my_dll!00010002h? или адрес нельзя использовать таким образом. Эх - одни вопросы... Помогите, а... |
|
|
Дата: Июн 18, 2004 13:54:11 наверное bpx адрес без my_dll! но это в контексте отлаживаемого процесса, то есть сначала addr выполнить |
|
|
Дата: Июн 18, 2004 15:11:33 · Поправил: jfx Дык он ведеь не загружен еще... Проблема немного специфична, нужно дебагить плуг под одну программу, вот этот плуг и использует эту библиотеку. Т.е. плуг как самостоятельный процесс и не присутствует в списке задачь... Я как понимаю, загружаем експорт библиотеки, ставим BP на нужную функцию и начинаем отлажывать то что нужно, когда вызывается нужная функция вываливается SoftIce... А так как вы говорите я не совсем представляю в кокой момент мне нужно ставить BP на адрес в памяти да и как этот адрес найти... Я ж чайник :)) |
|
|
Дата: Июн 18, 2004 18:20:21 added: хотя нет, попробовал - ничего не вышло, там манглинг другой, похоже эта dll была gcc скомпилирована Дизассемблировать библиотеку. Идой сгенерировать файл отладки. Прогнать через NMS. Выполнить команду SYM и посмотреть, чего скажет. |
|
|
Дата: Июн 18, 2004 21:09:11 Пардон, не так быстро... Дизасемблировал, как файл тотладки сделать?Я ж чайник :)) Что такое NMS |
|
|
Дата: Июн 18, 2004 21:20:47 похоже эта dll была gcc скомпилирована Подумав, утверждаю, что это наглая ложь. gcc манглит имена иначе ;) jfx То, что ты чайник, не освобождает тебя от чтения мануалов :) Теперь у мя к тебе вопросы, чтобы я мог как-то ответить. 1) dll ты компилировал сам? Есть ли у тебя pdb-файл к ней? 2) Если нет, то объясни мне, откуда ты получил имя "?warning@QMessageBox@@SAHPAVQWidget@@ABVQString@@1111HH@Z"? Сработал FLIRT? Но тогда какая это библиотека? 3) Умеешь ли ты пользоваться IDA? |
|
|
Дата: Июн 18, 2004 21:25:11 Нет dll - это библиотеки виджетов Qt (соригинальничал разработчик или партировали просто) как следствие pdb нет (хотя библиотека GNU при желании можно и скомпилировать). Имя я взял из дизасемблированного плуга который использует эту библиотекую. IDA - немного... Суть проблемы проста и прозрачна мне всего лишь нужно поставить BP на вызов этой функции. Вопрос как? |
|
|
Дата: Июн 18, 2004 21:37:18 Отвечаю по сути, если ты такой крутой :) 1) Компилишь GNU-библиотеку. 2) Загоняешь pdb-файл в Symbol Loader от Soft-Ice. 3) Набираешь команду SYM и видишь список размангленых имен вида имя_класса::имя_метода. 4) Набираешь команду bpx имя_класса::имя_метода. 5) Радуешься жизни или долго медитируешь над №1-4. |
|
|
Дата: Июн 18, 2004 21:40:00 :) При желании... которого нет :) А проще никак? По адресу или еще как нибудь... Правда ради одного BP нехочется качать исходники и компилировать :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.141 |