eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Заменить процедуру инициализации
Посл.ответ Сообщение

Ранг: 9.0 (гость)
Статус: Участник

Создано: 1 мая 2016 19:48 · Поправил: 1 мая 2016 19:51 Free-Man New!
Цитата · Личное сообщение · #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 имя процедуры? И как это проделать технически подскажите (некоторый опыт имею надеюсь разберусь с вашей помощью).

Ранг: 4.5 (гость)
Статус: Участник

Создано: 1 мая 2016 21:08 New!
Цитата · Личное сообщение · #2

Обычно если карты отличаются версиями, это может отражаться в PCI регистрах device id/vendor id или subsystem id/subsystem vendor id. Если отличий нет, то нет механизма, который бы позволил найти отличия одной платы от другой. Разве что там есть eeprom или еще что, где это зашито. Это нужно выяснять. Что за платы-то? Если отличий нет ни на уровне команд, ни на уровне функционала, то и нет повода для беспокойства, все должно работать с вашей программой.

Кроме того, вы указываете, что код инициализации находится в dll. Но обычно в последнее время все содержится в драйверах, а dll оказывается wrapper-ом для обращения из пользовательского окружения. Поэтому мне кажется, что копать нужно в сторону драйвера. Есть, правда, старые варианты, которые использовали под windows 98, когда операции ввода-вывода засовывали в dll непосредственно. Сейчас это уже не используется.

Без программ и/или результатов их анализа пока разговор беспредметный.

| Сообщение посчитали полезным: Free-Man


Ранг: 9.0 (гость)
Статус: Участник

Создано: 2 мая 2016 10:38 · Поправил: 2 мая 2016 10:41 Free-Man New!
Цитата · Личное сообщение · #3

Adtech ADT-8940. Плата для управления станком, многоосевая.
Карта что версии B довольно старая, чип на ней 2006.
Карта B

Карта A

--> 2 dll для двух версий карт + 2 демонстрационные программы <--
--> Драйвер для карты версии B, так же в архиве исходник демонстрационной программы из ссылки ранее, на Visual C++ <--

KIS ругается на второй архив, но насколько я знаю это не вирус, по крайней мере так уверяли китайцы что этот драйвер писали ну и проблем при эксплуатации не было. Sentinel - программа для doongle (по ошибке оставил в архиве)

Ранг: 409.7 (мудрец)
Статус: Участник

Создано: 2 мая 2016 12:04 · Поправил: 2 мая 2016 21:58 dosprog New!
Цитата · Личное сообщение · #4

А это ничего, что для карты А драйвера вроде как расчитаны на x64-систему, тогда как для карты B требуется x32 система? (Cудя по обеим DLL'ям - 8940A1.DLL и 8940B1.DLL) ..а впрочем..

Имена импортов в этих DLL'ях сильно различаются, значит тупо подменить одну другой не выйдет.
Да и драйверы эти DLL'и используют сильно разные.

Проблема в чём? - Предположу, что живьём имеется новая карта А, а весь софт с драйверами имеется только для старой карты В?

--Добавлено--

Скорей всего, это ни к чему не приведёт, но в DLL'ях есть такие фрагменты:
Code:
  1. Card A: .text:10007F63      cmp  eax, 89421022h    ;(Более новая)
  2. Card B: .text:100010CA      cmp  eax, 89411022h    ;(Более старая)


Пробуйте новый 8940B1.DLL (вместе с DEMO_B.EXE) запустить со своей картой "А".
{ Атач доступен только для участников форума } - 8940B1.DLL

В аттаче запатченная DLL. Или можете запатчить это место самостоятельно:
Code:
  1. Minor fix
  2.  
  3. Differences between "8940b1_orig.dll" & "8940b1.dll"
  4. 8940b1.dll
  5. .100010CD: 41 42 ;000010CD:


Может, если у них есть совместимость снизу вверх, то что-то и получится. Но сомневаюсь.
И придётся ковырять драйвер (adtcard.sys). Имея на чём попробовать (собственно карту "А").


--Добавлено2--

Драйвер adtcard.sys это на самом деле giveio.sys..
Интересующий же - это 8940b1.sys

| Сообщение посчитали полезным: Free-Man


Ранг: 9.0 (гость)
Статус: Участник

Создано: 2 мая 2016 14:42 New!
Цитата · Личное сообщение · #5

dosprog пишет:
Предположу, что живьём имеется новая карта А, а весь софт с драйверами имеется только для старой карты В?


Да карту версии B (старую) уже не найти в продаже нигде.

dosprog пишет:И придётся ковырять драйвер (adtcard.sys). Имея на чём попробовать (собственно карту "А").

А поподробнее что в драйвере ковырять?

Ранг: 409.7 (мудрец)
Статус: Участник

Создано: 2 мая 2016 14:58 · Поправил: 2 мая 2016 15:57 dosprog New!
Цитата · Личное сообщение · #6

Free-Man пишет:
А поподробнее что в драйвере ковырять?

Что показал запуск программы DEMO_B.EXE с подменной DLL - 8940B1.DLL ?

--Добавлено--

Снова предположу - вы имеете также и драйвера к новой карте "А", но они для Win х64.
Потому и возник вопрос с использованием старого софта?


Ранг: 9.0 (гость)
Статус: Участник

Создано: 2 мая 2016 17:24 New!
Цитата · Личное сообщение · #7

dosprog пишет:
Что показал запуск программы DEMO_B.EXE с подменной DLL - 8940B1.DLL ?


Запуск прошел! Сейчас тестирую все ли работает как надо, все ли доступно.

dosprog пишет:
Снова предположу - вы имеете также и драйвера к новой карте "А", но они для Win х64.
Потому и возник вопрос с использованием старого софта?


Да, драйвера есть. Софта под новую карту нету. Вот в архиве программа которая изначально работает с картой версии B, но эту карту приобрести сейчас нереально.
--> Link <--

Ранг: 4.5 (гость)
Статус: Участник

Создано: 2 мая 2016 21:53 New!
Цитата · Личное сообщение · #8

Видимо, различие в самом деле было в device id. Лечится подменой id.
 eXeL@B —› Программирование —› Заменить процедуру инициализации

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS