Взаимодействие приложений в DOS
От: Аноним  
Дата: 15.09.09 19:05
Оценка:
Добрый вечер.

Я начинающий программист, и у меня возникла проблема. Это проблема настолько общего характера, что это меня тревожит. Возможно, я выбрал неудачную тему для своего вопроса, поэтому заранее прошу прощения у модератора, если это так.

Итак, есть некий комплекс ПО (несколько программ и драйверов), которые работают на контроллерах под управлением (если я правильно понимаю) ОС DOS. Мне поручено разобраться в одной из этих программ, но вот затык: одна из самых важных функций в коде программы не вызывается. Вообще! Тем не менее, известно абсолютно точно, что она выполняется. И вот вопрос: каким образом? Есть предположение, что функция вызывается из другой программы, точнее из драйвера, т.к. эта программа работает в содружестве с драйвером — так ли это? Если да, то что это за механизм и где про него прочитать? Если нет, то как еще это объяснить?

16.09.09 11:49: Перенесено модератором из 'C/C++' — Кодт
Re: Взаимодействие приложений в DOS
От: ilnar Россия  
Дата: 15.09.09 20:25
Оценка: +1 :)
Здравствуйте, Аноним, Вы писали:

А>Добрый вечер.


А>Я начинающий программист, и у меня возникла проблема. Это проблема настолько общего характера, что это меня тревожит. Возможно, я выбрал неудачную тему для своего вопроса, поэтому заранее прошу прощения у модератора, если это так.


А>Итак, есть некий комплекс ПО (несколько программ и драйверов), которые работают на контроллерах под управлением (если я правильно понимаю) ОС DOS. Мне поручено разобраться в одной из этих программ, но вот затык: одна из самых важных функций в коде программы не вызывается. Вообще! Тем не менее, известно абсолютно точно, что она выполняется. И вот вопрос: каким образом? Есть предположение, что функция вызывается из другой программы, точнее из драйвера, т.к. эта программа работает в содружестве с драйвером — так ли это? Если да, то что это за механизм и где про него прочитать? Если нет, то как еще это объяснить?



Оффтоп: угораздило же тебя, в век космических полетов на марс, и других великих откровений типа windows 7, начинать карьеру с DOS.
Re: Взаимодействие приложений в DOS
От: Nik_1 Россия  
Дата: 15.09.09 20:44
Оценка:
а если брекпоинт поставить попадает туда?
Re: Взаимодействие приложений в DOS
От: Pavel Dvorkin Россия  
Дата: 16.09.09 04:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый вечер.


А>Я начинающий программист, и у меня возникла проблема. Это проблема настолько общего характера, что это меня тревожит. Возможно, я выбрал неудачную тему для своего вопроса, поэтому заранее прошу прощения у модератора, если это так.


А>Итак, есть некий комплекс ПО (несколько программ и драйверов), которые работают на контроллерах под управлением (если я правильно понимаю) ОС DOS.


Что-то мне подозрительна MS-DOS на контроллерах. Можно подробнее про эти контроллеры ? Процессор там какой ?

>Мне поручено разобраться в одной из этих программ, но вот затык: одна из самых важных функций в коде программы не вызывается. Вообще! Тем не менее, известно абсолютно точно, что она выполняется. И вот вопрос: каким образом? Есть предположение, что функция вызывается из другой программы


Что еще за другая программа в DOS ? MS-DOS — однопрограммная ОС.


>точнее из драйвера, т.к. эта программа работает в содружестве с драйвером — так ли это?


Теоретически в MS-DOS возможно все без исключения, но чтобы драйвер вызывал программу — вряд ли. Как он без программы-то работать будет ?


>Если да, то что это за механизм и где про него прочитать? Если нет, то как еще это объяснить?


Давай побольше подробностей, пока что сказать что-то трудно.
With best regards
Pavel Dvorkin
Re[2]: Взаимодействие приложений в DOS
От: Kernel0  
Дата: 16.09.09 05:12
Оценка:
Здравствуйте, Nik_1, Вы писали:

N_>а если брекпоинт поставить попадает туда?


Нет, не попадает, но это ничего не значит: прога запускалась на ПК и только она (полагаю, тот драйвер запускать под Виндой бессмысленно). А на контроллере Борланд С не поставишь для дебаггинга =(.
Re[2]: Взаимодействие приложений в DOS
От: Kernel0  
Дата: 16.09.09 05:32
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Что-то мне подозрительна MS-DOS на контроллерах. Можно подробнее про эти контроллеры ? Процессор там какой ?


Там точно MS-DOS. А вот этот процессор: http://ru.wikipedia.org/wiki/Am5x86#Am5x86

PD>Что еще за другая программа в DOS ? MS-DOS — однопрограммная ОС.


Я тоже сначала удивился =). Но, по-видимому, все программы кроме главной являются резидентными. Иначе как это еще объяснить?

>>Если да, то что это за механизм и где про него прочитать? Если нет, то как еще это объяснить?

PD>Давай побольше подробностей, пока что сказать что-то трудно.

Я думал, это достаточно общий вопрос. Не знаю, что еще добавить, чтобы еще более полно раскрыть ситуацию.
Re[3]: Взаимодействие приложений в DOS
От: kvasya  
Дата: 16.09.09 05:47
Оценка: +3
Здравствуйте, Kernel0, Вы писали:


K>Я думал, это достаточно общий вопрос. Не знаю, что еще добавить, чтобы еще более полно раскрыть ситуацию.


Вектора прерываний перехватываются?
Если с железом работает, вполне может по прерыванию выполняться
Re[3]: Взаимодействие приложений в DOS
От: MasterZiv СССР  
Дата: 16.09.09 05:49
Оценка:
Kernel0 wrote:

> PD>Что еще за другая программа в DOS ? MS-DOS — однопрограммная ОС.

>
> Я тоже сначала удивился =). Но, по-видимому, все программы кроме главной
> являются резидентными. Иначе как это еще объяснить?

Запросто в досе может быть несколько программ. Одна программа, не
выгружаясь, или выгружаясь частично (это правда будет её собственные
проблемы), может запустить другую. Это входит в функции операционной
системы DOS. Ну и ещё есть TSR-программы, работающие "в фоне".
Ну, и драйвера, конечно, хотя это уже не совсем программы.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Взаимодействие приложений в DOS
От: Pavel Dvorkin Россия  
Дата: 16.09.09 06:25
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Запросто в досе может быть несколько программ. Одна программа, не

MZ>выгружаясь, или выгружаясь частично (это правда будет её собственные
MZ>проблемы), может запустить другую.

Может, конечно, но чтобы эта запущенная программа вдруг начала вызывать функции из своего родителя — вряд ли. Хотя чего не бывает...

> Это входит в функции операционной системы DOS. Ну и ещё есть TSR-программы, работающие "в фоне".


TSR обычно с программой, работающей сейчас, не взаимодействуют. Наоборот — возможно.
With best regards
Pavel Dvorkin
Re[3]: Взаимодействие приложений в DOS
От: Pavel Dvorkin Россия  
Дата: 16.09.09 06:27
Оценка:
Здравствуйте, Kernel0, Вы писали:

K>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>Что-то мне подозрительна MS-DOS на контроллерах. Можно подробнее про эти контроллеры ? Процессор там какой ?


K>Там точно MS-DOS. А вот этот процессор: http://ru.wikipedia.org/wiki/Am5x86#Am5x86


Ладно. Тогда вопрос такой — какой компилятор ?
With best regards
Pavel Dvorkin
Re: Взаимодействие приложений в DOS
От: quodum  
Дата: 16.09.09 06:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Итак, есть некий комплекс ПО (несколько программ и драйверов), которые работают на контроллерах под управлением (если я правильно понимаю) ОС DOS. Мне поручено разобраться в одной из этих программ, но вот затык: одна из самых важных функций в коде программы не вызывается. Вообще! Тем не менее, известно абсолютно точно, что она выполняется. И вот вопрос: каким образом? Есть предположение, что функция вызывается из другой программы, точнее из драйвера, т.к. эта программа работает в содружестве с драйвером — так ли это? Если да, то что это за механизм и где про него прочитать? Если нет, то как еще это объяснить?


Для начала я бы предложил прогнать полнотекстовый поиск по всем файлам проекта на имя этой функции (если это ещё не проделано). Есть неплохой шанс, что эта функция регистрируется в качестве callback'а в драйвере -- или даже в самой программе -- путём передачи указателя на неё куда-то, откуда она затем вызывается по указателю.

Если это не так, то надо искать различные трюки, с помощью которых адрес функции может стать известен вовне. Например, она может быть первой функцией сегмента. Или даже map-файл программы может парситься на предмет извлечения адреса функции, и потом этот адрес зашивается в драйвер. Но это маловероятно, потому как негибко (отлаживать/поддерживать неудобно). Технически для драйвера или TSR нет никакой проблемы вызвать что угодно где угодно -- адресное пространство под ДОС одно на всех. Тут я бы предложил начинать копать от установления связи программы с драйвером (она же наверно делает какую-то инициализацию в начале работы).
Re[3]: Взаимодействие приложений в DOS
От: Sergey Россия  
Дата: 16.09.09 06:48
Оценка:
Здравствуйте, Kernel0, Вы писали:

N_>>а если брекпоинт поставить попадает туда?


K>Нет, не попадает, но это ничего не значит: прога запускалась на ПК и только она (полагаю, тот драйвер запускать под Виндой бессмысленно). А на контроллере Борланд С не поставишь для дебаггинга =(.


Тебе отладчик надо не от Борланд С, а soft ice досовский — кажется последняя версия была 2.81. Он через com-порт работать умеет. Правда глюкало жуткое. Что же касается вопроса, то та функция наверняка вызывается как обработчик прерывания.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: Оффтопик, но
От: bazis1 Канада  
Дата: 16.09.09 08:15
Оценка: -1
Чем быстрее и дружнее народ будет валить из подобных контор, тем быстрее народ осознает, кто контроллеры бывают с JTAG-ом, отладочные комплексы для них существуют не только на бумаге, а ДОС умер давным-давно.
Мой совет, не надо портить себе жизнь — валите из этой конторы. Всё равно, софт с таким подходом будет наиглючнейший, а крайним выйдете Вы.
Re: Взаимодействие приложений в DOS
От: MaxGl Украина  
Дата: 16.09.09 08:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>...одна из самых важных функций в коде программы не вызывается. Вообще! Тем не менее, известно абсолютно точно, что она выполняется.

1. Эта функция — обработчик прерывания.
2. Функция может вызываться через переменную-указатель-на-функцию.

Поищи по исходникам все места, где фигурирует имя этой функции — ситуация должна проясниться.
Re[2]: Оффтопик, но
От: quodum  
Дата: 16.09.09 13:53
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Чем быстрее и дружнее народ будет валить из подобных контор, тем быстрее народ осознает, кто контроллеры бывают с JTAG-ом, отладочные комплексы для них существуют не только на бумаге, а ДОС умер давным-давно.

B>Мой совет, не надо портить себе жизнь — валите из этой конторы. Всё равно, софт с таким подходом будет наиглючнейший, а крайним выйдете Вы.

Вы неправы. Есть довольно узкая, но отнюдь не микроскопическая ниша "промышленных PC", которые строятся на контроллерных вариантах x86 (начиная с 80186, хотя nowadays всё же в основном пентиумы) и комплектуются ДОСом на флэш-диске. Погуглите Octagon Systems для примера.
Re: Взаимодействие приложений в DOS
От: Kernel0  
Дата: 16.09.09 19:19
Оценка:
Всем спасибо за ответы. Все гораздо проще: функция все же вызывается из этой программы, но настолько залихватским образом, что я чуть не сломал себе мозг. В общем, обожаю ООП. Сорри тем, у кого отнял время, это, как говорится, меа кульпа.
Re[3]: Оффтопик, но
От: bazis1 Канада  
Дата: 16.09.09 19:44
Оценка:
Здравствуйте, quodum, Вы писали:

Q>Вы неправы. Есть довольно узкая, но отнюдь не микроскопическая ниша "промышленных PC", которые строятся на контроллерных вариантах x86 (начиная с 80186, хотя nowadays всё же в основном пентиумы) и комплектуются ДОСом на флэш-диске. Погуглите Octagon Systems для примера.


Это единственный тип контроллеров, решающих свой круг задач? Абсолютно нет альтернатив? Есть рынок, но на нем нет развития за последние 20 лет? ИМХО, дело в инерционности конторы, не желающей разово вложиться в переход на новое железо с куда более коротким циклом разработки.
Re[4]: Оффтопик, но
От: Аноним  
Дата: 16.09.09 20:58
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Это единственный тип контроллеров, решающих свой круг задач? Абсолютно нет альтернатив? Есть рынок, но на нем нет развития за последние 20 лет? ИМХО, дело в инерционности конторы, не желающей разово вложиться в переход на новое железо с куда более коротким циклом разработки.


Переход на новое железо давно сделан. Но надо поддерживать и старое...
Re[4]: Оффтопик, но
От: MaxGl Украина  
Дата: 16.09.09 21:19
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Это единственный тип контроллеров, решающих свой круг задач? Абсолютно нет альтернатив? Есть рынок, но на нем нет развития за последние 20 лет? ИМХО, дело в инерционности конторы, не желающей разово вложиться в переход на новое железо с куда более коротким циклом разработки.

Есть.
Только переход на новое железо тянет за собой большие проблемы. Это промышленные контроллеры, а не consumer-electronics (и тем более не софт для РС).
Чтобы перейти на новое железо, надо перерисовать все схемы, переразвести платы, переписать все драйверы, а потом пройти кучу сертификаций на электромагнитную совместимость, вибростойкость, надежность и т.д.
Все это стоит дофига денег. Гораздо проще сидеть на старом железе.
А вот привязка к ОС не совсем понятна... Но если посмотреть на производимые РС104 модули, то почти все они окажутся на х86. А драйверы уже давно под DOS написаны.
Bloody legacy
Re[2]: Взаимодействие приложений в DOS
От: Privalov  
Дата: 17.09.09 09:00
Оценка:
Здравствуйте, Kernel0, Вы писали:

K>Всем спасибо за ответы. Все гораздо проще: функция все же вызывается из этой программы, но настолько залихватским образом, что я чуть не сломал себе мозг. В общем, обожаю ООП. Сорри тем, у кого отнял время, это, как говорится, меа кульпа.


Можешь озвучить подробности? Мало ли, кому-то покажется интересным, а у других, кроме того, выжмет скупую мужскую слезу.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.