Сейчас на форуме: vsv1 (+3 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Нет символьных имен функций в Olly |
Посл.ответ | Сообщение |
|
Создано: 25 февраля 2008 11:21 · Личное сообщение · #1 Видел, но не могу найти, как получить отладочную информацию по exe | dll. Пример был для SoftIce. Перекомпилировался exe так, что вместо числовых адресов были символьные имена переменных и функций. Повторите, пожалуйста, как это сделать. Есть ли подобное для Olly? Столкнулся с такой проблемой по следующему поводу: реверсил приложение на предмет обнаружения момента переключения на fullscreen. Инициализация видеорежима выполнялась какой-то функцией из ddraw.dll. Функция была чисто адресная, без какого-либо названия и определения переменных, ей передаваемых, ну типа как неизвестная. Потом уже из этой функции вызывалась где-то USER32@ChangeDisplaySettingsA. Функции из DDRAW передавалась какая-то структура. И вот как определить, что это за функция DDRAW и где в этой немаленькой структуре флажок про fullscreen. ![]() |
|
Создано: 25 февраля 2008 15:08 · Личное сообщение · #2 |
|
Создано: 25 февраля 2008 15:25 · Личное сообщение · #3 |
|
Создано: 25 февраля 2008 17:08 · Личное сообщение · #4 Что-то я о такой функции в WIN API не слышал, может эт в твоей библе такая функа есть ( ну или сторонних)!!! если да, тогда (думаю самый простой вариант, если у функции библы есть имя) : 1) Options->Debugging options->Break on new module dll ( ставишь галку ) 2) жмешь Shift+F9 пока в списке не появится твоя длл. 3) по ней правым кликом View Names(Ctrl+N) и там бряк на свою функу!!! ![]() |
|
Создано: 25 февраля 2008 22:10 · Личное сообщение · #5 Это самая что ни на есть стандартная DirectDraw-ская функция. Из MSDN: HRESULT SetCooperativeLevel( HWND hWnd, DWORD dwFlags ); По идее должна быть в ddraw.dll. Но ее там нет. Как я понимаю, с помощью DirectDrawCreate создается DirectDraw объект. У этого объекта есть метод SetCooperativeLevel, в котором и устанавливается видеорежим fullscreen. Вот и хочется отловить выполнение этого метода, чтобы поменять флаг DDSCL_FULLSCREEN на DDSCL_NORMAL. DDRAW@DirectDrawCreateEx ловится нормально, а где ловить SetCooperativeLevel? Я так понимаю, почему то этот метод не экспортируется обычным образом. Метод вызывается чисто по адресу, Olly не понимает, что это SetCooperativeLevel. Вот вслепую и ладишь в дебрях DDRAW, не видя символьных названий, не понимая что к чему. Хочется, чтобы Olly втыкала такие методы и переменные, которые им передаются. Ибо методы стандартные. ![]() |
|
Создано: 05 марта 2008 17:42 · Личное сообщение · #6 Clim пишет: По идее должна быть в ddraw.dll. Но ее там нет. Ты правильно все написал про объкты - там совсем другой механизм вызова. Это ActiveX/OCX Подробнее читай на форумах программистов на DirectX, а если коротко - у этого объекта есть большая табличка методов - там и лежат их адреса. Причем это не совсем адреса подпрограммы - вызов этих методов осуществляется иначе. Я пытался отлаживать внутренности - логика там такая : прога готовит нужные структуры и выходит. Обработка идет асинхронно, т.к. все завязано на видео-память и внутренние алгоритмы самой видео-карты. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Нет символьных имен функций в Olly |