Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача управления другой программе.  (Прочитано 8072 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
zuuuuk
Постоялец

ru
Offline Offline

« : 27-05-2014 06:43 » 

Доброго времени суток.

У меня следующая задача.
 Работает основная программа, в какой то момент она должна
загрузить (из флеш) стороннюю программу ( со своим main.  )  и передать управление ей. полностью.

подскажите
1) в каком формате хранить эту программу в памяти (bin или hex). Сейчас она в формате elf/
2) Возможно ли подобрать такой формат хранения в памяти, что бы можно было эту программу
переместить простым копирование в нужный адрес.
3) как передать ей управление? через указатель на функцию или иначе?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 27-05-2014 09:53 » 

Ну, во-первых, причём тут встраиваемые системы?

Во-вторых, чем стандартный exec языка C не устраивает? Он ровно это и делает: получает путь к файлу образа процесса, загружает его и передаёт ему управление полностью.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 27-05-2014 10:02 » 

судя по посту - нет там "стандартного "exec" и  речь вообще не про x86 архитектуру. 
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 27-05-2014 10:13 » 

подскажите
1) в каком формате хранить эту программу в памяти (bin или hex). Сейчас она в формате elf/

Ее попросту незачем хранить в памяти (если речь идет об оперативной памяти, разумеется). Тем более если процессор встроенной системы имеет гарвардскую архитектуру, что нередко бывает.

2) Возможно ли подобрать такой формат хранения в памяти, что бы можно было эту программу
переместить простым копирование в нужный адрес.

В общем случае - нет.

3) как передать ей управление? через указатель на функцию или иначе?

Воспользоваться услугами загрузчика ОС, если таковая имеется. Если нет, придется написать его самому (и заодно по ходу написания поднять skill level до нужного для работы со встроенными системами уровня).
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #4 : 27-05-2014 10:36 » new

1) в каком формате хранить эту программу в памяти (bin или hex). Сейчас она в формате elf/
Всё зависит от архитектуры аппаратной части, в некоторых случая можно из elf-файла при помощи objcopy получить bin-файл - с чистыми кодом и данными.

2) Возможно ли подобрать такой формат хранения в памяти, что бы можно было эту программу
переместить простым копирование в нужный адрес.
3) как передать ей управление? через указатель на функцию или иначе?
можно написать свой startup на ассемблере куда передать управление, а этот startup уже вызовет main().

Если Вы используете инструментарий на базе gcc - почитайте про ld-скрипты - они позволяют задать нужную компоновку, для более простого получения bin-файла.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines