Управление потоком программ через память получателей в c / c ++ - PullRequest
0 голосов
/ 17 января 2012

Извините, если название немного неясно, я не являюсь носителем языка, и у меня возникли проблемы с формулировкой моей идеи ...

Предполагая, что у меня есть все необходимые функции и объекты для набора процедур, которые должны быть выполнены, скомпилированы и созданы в памяти, и что я знаю их адреса и размеры, как я могу управлять потоком программы с помощью псевдо "двоичного" файла это в основном скрипт, который говорит: «вставьте эти данные в адрес этой функции, вызовите этот адрес функции, вставьте возвращенное значение в адрес этой функции» и так далее ...

В основном мне нужно обработать псевдо "машинный" код для доступа и динамического управления коллекцией взаимосвязанных объектов и статической логики через их адреса памяти.

Спасибо!

РЕДАКТИРОВАТЬ: Пожалуйста, опубликуйте несколько фрагментов кода перед тем, как закрыть мой вопрос как дубликат вопроса, который на самом деле не предоставляет нужную мне информацию.

EDIT2: добавил это из комментария ниже, возможно, это внесет больше ясности в мой вопрос:

Вместо компиляции целых программ я стараюсь использовать предварительно скомпилированные компоненты для создания динамических объектов на ходу. Деревья объектов можно сериализовать на диск и воссоздать в одно мгновение (выделив все дерево в пуле, а не объект за объектом), поэтому у меня есть способ создать динамическая программа, сохраните ее на диск и восстановите в памяти, все идентификаторы времени разработки заменены их адресами. СЕЙЧАС все, что мне нужно, - это способ заставить всю структуру программы работать.

Ответы [ 2 ]

0 голосов
/ 17 января 2012

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

Предполагая, что я понимаю, что вы сказали - ответ нет, не так. Вам нужно будет что-то сделать, чтобы создать состояние программы и управлять логическим потоком, что делают интерпретаторы и «машины».

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

В любом случае невозможно связать ваши объекты, а затем ожидать, что они будут знать, кто работает в каком порядке, а кто - нет. Вы должны как-то перенести «ум» вашего файла в действие. Одно только связывание не сделает этого, потому что вы хотите, чтобы смарты были внешними по отношению к вашей объектной библиотеке.

0 голосов
/ 17 января 2012

Похоже, вам нужно написать эмулятор для машины, язык которой вы хотите интерпретировать. Здесь - ссылка, объясняющая, как это сделать.

...