Сейчас на форуме: jinoweb (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› Заменить процедуру инициализации |
Посл.ответ | Сообщение |
|
Создано: 01 мая 2016 19:48 · Поправил: Free-Man · Личное сообщение · #1 Подскажите пожалуйста, ситуация следующая: Есть 2 PCI карты одна версия А другая версия B, есть 2 программы к этим картам, в обеих программах есть кусок кода: proc near push esi mov esi, ecx call card_B_initial В этой процедуре происходит только jmp ds:card_B_initial (card_B_initial это импортированная процедура инициализации из соответствующей .dll'ки) test eax, eax mov [esi], eax jle short loc_401557 (тут тупо pop esi) mov esi, 1 Стоит задача заставить программу от карты B работать с картой А. Инструкции у обеих карт как мне известно одинаковые. Подскажите как это сделать? Заменить в секции импорта процедуру инициализации из dll от карты B на процедуру инициализации из dll от карты А верно? Или подменить в dll имя процедуры? И как это проделать технически подскажите (некоторый опыт имею надеюсь разберусь с вашей помощью). ![]() |
|
Создано: 01 мая 2016 21:08 · Личное сообщение · #2 Обычно если карты отличаются версиями, это может отражаться в PCI регистрах device id/vendor id или subsystem id/subsystem vendor id. Если отличий нет, то нет механизма, который бы позволил найти отличия одной платы от другой. Разве что там есть eeprom или еще что, где это зашито. Это нужно выяснять. Что за платы-то? Если отличий нет ни на уровне команд, ни на уровне функционала, то и нет повода для беспокойства, все должно работать с вашей программой. Кроме того, вы указываете, что код инициализации находится в dll. Но обычно в последнее время все содержится в драйверах, а dll оказывается wrapper-ом для обращения из пользовательского окружения. Поэтому мне кажется, что копать нужно в сторону драйвера. Есть, правда, старые варианты, которые использовали под windows 98, когда операции ввода-вывода засовывали в dll непосредственно. Сейчас это уже не используется. Без программ и/или результатов их анализа пока разговор беспредметный. ![]() |
|
Создано: 02 мая 2016 10:38 · Поправил: Free-Man · Личное сообщение · #3 Adtech ADT-8940. Плата для управления станком, многоосевая. Карта что версии B довольно старая, чип на ней 2006. Карта B ![]() Карта A ![]() KIS ругается на второй архив, но насколько я знаю это не вирус, по крайней мере так уверяли китайцы что этот драйвер писали ну и проблем при эксплуатации не было. Sentinel - программа для doongle (по ошибке оставил в архиве) ![]() |
|
Создано: 02 мая 2016 12:04 · Поправил: dosprog · Личное сообщение · #4 А это ничего, что для карты А драйвера вроде как расчитаны на x64-систему, тогда как для карты B требуется x32 система? (Cудя по обеим DLL'ям - 8940A1.DLL и 8940B1.DLL) ..а впрочем.. Имена импортов в этих DLL'ях сильно различаются, значит тупо подменить одну другой не выйдет. Да и драйверы эти DLL'и используют сильно разные. Проблема в чём? - Предположу, что живьём имеется новая карта А, а весь софт с драйверами имеется только для старой карты В? --Добавлено-- Скорей всего, это ни к чему не приведёт, но в DLL'ях есть такие фрагменты: Code:
Пробуйте новый 8940B1.DLL (вместе с DEMO_B.EXE) запустить со своей картой "А". ![]() В аттаче запатченная DLL. Или можете запатчить это место самостоятельно: Code:
Может, если у них есть совместимость снизу вверх, то что-то и получится. Но сомневаюсь. И придётся ковырять драйвер (adtcard.sys). Имея на чём попробовать (собственно карту "А"). --Добавлено2-- Драйвер adtcard.sys это на самом деле giveio.sys.. Интересующий же - это 8940b1.sys ![]() |
|
Создано: 02 мая 2016 14:42 · Личное сообщение · #5 dosprog пишет: Предположу, что живьём имеется новая карта А, а весь софт с драйверами имеется только для старой карты В? Да карту версии B (старую) уже не найти в продаже нигде. dosprog пишет:И придётся ковырять драйвер (adtcard.sys). Имея на чём попробовать (собственно карту "А"). А поподробнее что в драйвере ковырять? ![]() |
|
Создано: 02 мая 2016 14:58 · Поправил: dosprog · Личное сообщение · #6 |
|
Создано: 02 мая 2016 17:24 · Личное сообщение · #7 dosprog пишет: Что показал запуск программы DEMO_B.EXE с подменной DLL - 8940B1.DLL ? Запуск прошел! Сейчас тестирую все ли работает как надо, все ли доступно. dosprog пишет: Снова предположу - вы имеете также и драйвера к новой карте "А", но они для Win х64. Потому и возник вопрос с использованием старого софта? Да, драйвера есть. Софта под новую карту нету. Вот в архиве программа которая изначально работает с картой версии B, но эту карту приобрести сейчас нереально. ![]() |
|
Создано: 02 мая 2016 21:53 · Личное сообщение · #8 |
![]() |
eXeL@B —› Программирование —› Заменить процедуру инициализации |