2016-06-26 8 views
0


поэтому, чтобы все было ясно, моя цель - написать код, который может сохранить важные части его собственного кода (например, основной func или другие классы или что-то в этом роде) , который я буду просто копировать их внутри класса , тогда я хочу, чтобы моя программа добавляла/удаляла некоторые коды (func, obj, class, ...), используя пользовательский ввод, и после всего этого я хочу, чтобы он снова обновил этот код и создал класс, который содержит ключевые части код автоматически, и я хочу, чтобы он скомпилировал это и удалил сам.

Итак, у меня есть все вышеперечисленное и вычислено за исключением части, которую я хочу, чтобы она скомпилировала этот код, есть ли вообще ссылка g ++ на мой код? но я знаю, что g ++ имеет основной func, не создавали бы проблемы с моим основным func? + я не могу использовать компилятор на существующую систему и я не могу иметь компилятор как отдельный исполняемый файл ...Как связать g ++ с моим проектом?

+0

Вы не можете просто связать g ++ in. Исполняемые файлы не могут быть связаны с другими исполняемыми файлами, а g ++ - это больше, чем просто исполняемый файл (для работы требуется большая коллекция файлов). Лучший способ сделать это - либо использовать внешнюю копию GCC для создания динамических объектов, которые можно загрузить, либо сгенерировать код с LLVM. –

+0

ik, что g ++ - exe, но can not мы используем precompiled binary .... и я только что упомянул, что я не могу использовать внешний материал ... PLS читает txt ... что такое llvm? – shervin

+0

Хорошо, так что ive googled LLVM, кажется хорошим выбором, но мне нужно написать собственный компилятор, используя библиотеки llvm? – shervin

ответ

1

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

Имейте в виду, что большинство компиляторов огромны по размеру. Попробуйте установить G ++ или MinGW в вашей системе, чтобы получить понимание.

Для получения дополнительной информации, найдите в Интернете «Теория проектирования компилятора», которая предоставит вам информацию о переводе языков, таких как C++, в исполняемый файл.

Кроме того, вам нужно будет запустить операционную систему с новым исполняемым файлом (и убить настоящий экземпляр). Это потребует некоторых исследований в API операционной системы.

IMHO, лучший способ - использовать язык интерпретации или скрипта. Альтернативный вариант состоит в том, чтобы ваша программа на C++ выполняла сценарий или фрагменты сценария.

Редактировать 1: очень низкий уровень
На самом низком уровне, микрокод (команда байты, что процессор, процессы) должны быть сгенерированы.

шаги будут:

  1. Сформировать микрокод и место в каком-нибудь известном месте в памяти (что у вас есть доступ к и имеет привилегию выполнения).
  2. Выполнение переноса на микрокод, не забудьте нажать на возврат адрес в стеке.

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

Вы можете потратить много месяцев или лет на создание кода, который генерирует микрокод, или выяснить, как использовать куски компиляторов (например, CLang или G ++).

+0

yep thats в значительной степени это, но я думаю, потому что пользователь запускает мой код в первый раз, когда у него есть привилегии, которые у пользователя есть, и если он root, я думаю, что могу изменить ip-регистр на процессоре, чтобы запустить сгенерированный код в противном случае мне нужно будет скопировать некоторую сборку, чтобы использовать некоторые длинные jmps, которые можно обрабатывать, кроме части генерации :( – shervin

+0

Я думаю, что вы имеете в виду «машинный код» вместо «микрокода». Микрокод - это набор инструкций нижнего уровня, который не является обычно доступный вообще. –

 Смежные вопросы

  • Нет связанных вопросов^_^