IgelImNebel
Интересующийся
Offline
|
|
« : 14-11-2017 10:37 » |
|
Всем доброго времени суток!
Ситуация следующая: имеется некая программка для мониторинга и дистанционного управления неким (это секрет) оборудованием. Всё что о ней известно это ее размер (580 КБ (593 978 байт)); Состоит из одного файла .exe; Год поставки на объект вместе с оборудованием - 2001; Работала порядка 15 лет под управлением Windows 95; Установки не требует.
А теперь о проблеме: при запуске на Win7 загружает ЦП на 100%. Запуск в любом доступном режиме совместимости не устраняет проблему.
Суть вопроса: правильной ли я дорогой иду пытаясь решить проблему? Может кто сталкивался с подобной проблемой и что-то сможет посоветовать?
Дорога избранная мною: 1) Попытаться декомпилировать программу во всех бесплатных декомпиляторах которые удастся найти и скачать; 2) Если найдется декомпилятор распознающий эту стерлядь (это рыба такая) то скомпилировать полученный код под нужную ОСь; 3) Если будет работать хорошо то и славно. Если нет то отдебажить (извините за выражение) её по-полной и опять скомпилировать; 4) А дальше по обстоятельствам.
P.S. Доселе не пользовался декомпилятором и не представляю, что получится на выходе. Да и программист из меня никакой, чтобы искать в незнакомой программе подобного рода баги. Именно поэтому решил сперва задать вопрос на форуме в надежде на подсказку знающего человека - вдруг вообще я не в ту степь попёр и мне не нужно так заморачиваться? P.P.S. Программка реально нужная на объекте, старый комп под Win95 потух, а новый (самосборный из старых деталек) не потянет параллельно виртуалку с еще одной виндой.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #1 : 14-11-2017 11:07 » |
|
по какому аппаратному интерфейсу программа управляет этим оборудованием ?
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Вад
|
|
« Ответ #2 : 14-11-2017 11:17 » |
|
Если приложение под виртуалкой работоспособно - я бы следовал пути "работает - не ломай": скорее всего, дешевле будет найти/модернизировать комп, тянущий виртуалку (не так уж много там и надо), или отдельный для Win95, чем тратить время на декомпиляцию и прочие танцы с бубном.
|
|
« Последнее редактирование: 14-11-2017 11:20 от Вад »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 14-11-2017 15:05 » |
|
virtualbox вроде должон вытянуть, и не так много жрет памяти,
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Aether
|
|
« Ответ #4 : 14-11-2017 15:15 » |
|
Дорога избранная мною: 1) Попытаться декомпилировать программу во всех бесплатных декомпиляторах которые удастся найти и скачать; ...
Цена этой дороги скорее всего будет выше стоимости целого старого, но рабочего ПК. Оборудование случаем LPT и COM порты не использует?
|
|
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #5 : 15-11-2017 07:40 » |
|
IgelImNebel, Насколько я знаю, декомпилятор, а вообще - дизассемблер, не выполнит Вам портирование под новую ОС, в лучшем случае Вы получите после трансляции полученного исходника на языке ассемблера - идентичный до байта exe-файл. Самый простой вариант Вам уже подсказали - лучше попытаться запустить в виртуальной машине. Гораздо более сложный, имхо, вариант - дизассемблировать, разобраться что оно делает, и написать нужный функционал с нуля.
|
|
|
Записан
|
|
|
|
IgelImNebel
Интересующийся
Offline
|
|
« Ответ #6 : 15-11-2017 15:08 » |
|
по какому аппаратному интерфейсу программа управляет этим оборудованием ?
Дорога избранная мною: 1) Попытаться декомпилировать программу во всех бесплатных декомпиляторах которые удастся найти и скачать; ...
Цена этой дороги скорее всего будет выше стоимости целого старого, но рабочего ПК. Оборудование случаем LPT и COM порты не использует? Да-да тот самый COM (RS-232) А это важно? Программа запускается на любом другом компьютере. И и на любом сразу ЦП грузит на 100%. Не важно даже подключаем ли её к целевому оборудованию.
|
|
|
Записан
|
|
|
|
IgelImNebel
Интересующийся
Offline
|
|
« Ответ #7 : 15-11-2017 15:24 » |
|
IgelImNebel, Насколько я знаю, декомпилятор, а вообще - дизассемблер, не выполнит Вам портирование под новую ОС, в лучшем случае Вы получите после трансляции полученного исходника на языке ассемблера - идентичный до байта exe-файл. Самый простой вариант Вам уже подсказали - лучше попытаться запустить в виртуальной машине. Гораздо более сложный, имхо, вариант - дизассемблировать, разобраться что оно делает, и написать нужный функционал с нуля.
Честно признаюсь я в данной теме не разбираюсь, поэтому поправьте если ошибаюсь - при дизассемблировании получается набор команд на ассемблере, а при декомпиляции должен получиться код на языке высокого уровня на котором он был написан (пусть и не в исходной форме как писал разработчик и не столь удобочитаемый). Например если программа была скомпилирована с языка Си то при декомпиляции декомпилятором именно для этого языка и получится на выходе что-то на том же Си? Моя мысль была такой: "а если загрузка ЦП это не баг программы (ведь не грузит на 100% под win95), а особенность её работы под управлением ОС? Разные версии ОС имеют свои особенности, которые наверняка учитывают компиляторы. Следовательно если исходник скомпилировать по новой, свежим компилятором, то может что-то измениться, что позволяет программе так забивать запросами камень."
|
|
|
Записан
|
|
|
|
Aether
|
|
« Ответ #8 : 15-11-2017 18:30 » |
|
Да-да тот самый COM (RS-232) А это важно?
Бывает важно, некоторые программы требуют присутствия именно COM порта, размещённого непосредственно на материнской плане. И не поддерживают мосты, например, вида USB<->RS-232 или PCI<->RS-232. а при декомпиляции должен получиться код на языке высокого уровня на котором он был написан (пусть и не в исходной форме как писал разработчик и не столь удобочитаемый).
Про декомпиляцию слышу впервые, и не очень верю в её успех. Теоретически, код на ассемблере можно представить в виде "С" формата, однако чтение такого кода будет ещё более сложным, чем читать исходный код на ассемблере. Одна работа с флагами во что может вылиться, да и обозначения переменных без привязки к их сущности только запутает дело. В проблеме можно разобраться, потратив неопределённо большое количество сил и времени на проработку. Старый ПК стоить может крайне не дорого, предположим, 5К, некоторые люди столько зарабатывают за день. В Tiny модели памяти формата *.com с максимальным размером в 64 КБ можно ковыряться не одну неделю. Иногда дешевле заказать разработку продукта заново.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #9 : 15-11-2017 22:04 » |
|
IgelImNebel, винда x32 или x64? запускали с правами администратора? кстати программа виндовая? точно не дос?) (на всякий случая - я уж забыл как там оно было в 95том с портами i/o ) тоже встречал, что не все любят работать с ком портами через мосты. как ком порт Был и теперь реализован физически? USB шнурок, плата, встроенный? настройки порта? PS может действительно проще найти старый комп с 95той виндой и не тратить время?) декомпиляция... не стоит оно того ИМХО)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Sla
|
|
« Ответ #10 : 15-11-2017 22:58 » |
|
Я так понимаю, что программулина напрямую лезет к адресам порта, миную системные настройки. А может все же нет? Если она образца 2000, то там уже и xp была, и 98-ая А может там вообще crt-шная либа доступа к видео?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
IgelImNebel
Интересующийся
Offline
|
|
« Ответ #11 : 16-11-2017 03:22 » |
|
Огромное спасибо за подсказки и информацию. На следующей смене поспрашиваю мужиков, что и как там работает, попробуем запустить с подключением (хотя это они вероятно в первую очередь пробовали). Насчёт того для дос или нет она - не знаю. Но скорее всего не новее 95го ибо внедряют инновации на объект медленно и уже проверенные, дабы 100% работало. По поводу заказа обновлённого ПО - компании которая выпускала оборудованип уже давно нет, следовательно и поддержки оного. Так бы не пытались своими силами решить.
Как будут какие-либо новые подробности - напишу.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #12 : 16-11-2017 07:31 » |
|
Помню, уже в 2004-м были трудности поставить 95-ую винду на современное железо тех лет, да и нафиг эта падучая жуть, когда уже был XP. У нас тоже было ПО для настройки мультиплексоров SDH, которое на 98 даже не запускалось. VMWare решило все проблемы. Сегодня систем виртуализации много больше.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
IgelImNebel
Интересующийся
Offline
|
|
« Ответ #13 : 21-11-2017 04:05 » |
|
В общем со всеми подключениями и правами администратора конечно-же пробовали и до меня. А программа, говорят, скорее всего под дос деланая. В общем видимо с виртуалкой что-то придумывать будем.
|
|
|
Записан
|
|
|
|
|
RXL
|
|
« Ответ #15 : 21-11-2017 21:37 » |
|
DosBox — эмулятор. Т.е. работает много медленнее, чем вируталка (при наличии поддержки виртуализации в ядре).
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Ochkarik
|
|
« Ответ #16 : 22-11-2017 07:18 » |
|
RXL, в вики и virtualBox эмулятором обозван в статье) на самом деле а зачем досу виртуалка нужна? медленнее - понятие отностиельное, может программе будет достаточно. PS там кстати скорость по умолчанию занижена. и режим эмуляции можно поменять.
|
|
« Последнее редактирование: 22-11-2017 10:54 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Aether
|
|
« Ответ #17 : 22-11-2017 14:05 » |
|
Вопрос: какой из методов отобразит фактические порты на пространство портов DOS? То есть, предположим, у Вас на ПК нет непосредственно установленных портов: COM1: I/O port 0x3F8, IRQ 4 COM2: I/O port 0x2F8, IRQ 3 COM3: I/O port 0x3E8, IRQ 4 COM4: I/O port 0x2E8, IRQ 3 , но есть плата PCI-e, которая использует драйвер Windows, который сам по себе пространство портов МП не затрагивает. Устройство COM1 в Windows средствами WINAPI как бы есть, а порт 0x3F8 не отвечает, и программа в режиме V86 не работает.
|
|
|
Записан
|
|
|
|
darkelf
Молодой специалист
Offline
|
|
« Ответ #18 : 22-11-2017 14:26 » |
|
Тут, пишут, что можно настроить гостевой COM-порт, на нужный реальный.
|
|
|
Записан
|
|
|
|
Aether
|
|
« Ответ #19 : 22-11-2017 15:15 » |
|
Тут, пишут, что можно настроить гостевой COM-порт, на нужный реальный. Тогда решение подходит, единственное, что смущает, как в принципе такое отображение происходит? В ранних х86, если я правильно помню, линии портов и памяти были одни и те же, просто инструкции "IN" и "OUT" выставляли на специальной линии флаг, что значения на шине идут не в память, а в физическое устройство. Тут же получается, что устройства-то нет.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #20 : 22-11-2017 20:26 » |
|
VirtualBox, при наличии аппаратной поддержки виртуализации, выполняет код без потерь (кроме эмуляции железа). Иначе, конечно, нужна эмуляция.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|