Script to EXE

отредактировано 01:39 Раздел: FastScript
Можно ли как-то генерировать исполняемый exe-файл скрипта (с помощью GetILCode), если скрипт написан в виде самостоятельной программы типа
begin
  ShowMessage('Hello');
end.

(возможно надо подключить какие-то модули в uses)

Комментарии

  • отредактировано 01:39
    Генерировать exe нельзя.
    Для генерации exe из скриптов на pascal'e используйте, например, Delphi ;)
  • отредактировано 01:39
    При выполнении скрипта он же все равно преобразуется в исполняемый код, который находится в памяти. А при компиляции с помощью Delphi требуется куча библиотек.
  • отредактировано 01:39
    написал:
    При выполнении скрипта он же все равно преобразуется в исполняемый код
    Да, преобразуется. Его можно получить функцией GetILCode.
    Но к формату exe он ни какого отношения не имеет.
  • отредактировано 01:39
    Т.о. есть программа размером <1 Мб, которая позволяет выполнять скрипты, т.е. она является интерпретатором (и почти компилятором). Так может можно из интерпретатора сделать компилятор (ведь достаточно только сохранить образ из памяти)
  • отредактировано 01:39
    Нельзя.
    Зачем вам это нужно? Может есть другое решение...
  • отредактировано 01:39
    написал:
    Т.о. есть программа размером <1 Мб, которая позволяет выполнять скрипты, т.е. она является интерпретатором (и почти компилятором). Так может можно из интерпретатора сделать компилятор (ведь достаточно только сохранить образ из памяти)
    Мне кажется, что ты немного путаешь. Тот образ скомпилированой програмы, что хранится в памяти не имеет никакого отношения к коду обычного исполняемого файла (exe, com). Это просто некий адаптированный код, понятный FastScript-у, но не более того.
  • отредактировано 01:39
    есть набор компонентов RemObjects Pascal Script, альтернативный вашему. Там тоже есть возможность сохранять промежуточный скомпилированный код. При сохранении вашего кода в файл *.com этот файл при попытке выполнения пишет "процессор выпоолнил недопустимую операцию, приложение будет закрыто", а при тех же действиях с RemObjects файл исполняется, но не выдает нужного результата (при одинаковом скрипте RemObjects скомпилированный код весит примерно на 10% больше). Исполнение файла без ошибок процессора уже означает, что двоичная информация в файле является понятными процессору коммандами и данными. Далеес с помощью дизассемблера я открыт скомпилированный код (и FastScript и RemObjects). В итоге дизассемблирования получился довольно логичный ассемблер-код. При попытке дизассемблирования любого не исполняемого файла (т.е. не exe, не com, не dll) ассемблер-код получить нельзя (весь файл будет представлен как сплошной набор данных и ни одной комманды). Поясните тогда этот момент
  • отредактировано 01:39
    FS не генерирует МАШИННЫЙ код. Это не двоичный компилятор. Промежуточный код, генерируемый FS, представляет собой xml-файл, который при исполнении переводится в структуры в памяти.
  • отредактировано 01:39
    С дизассемблированием файла ошибся, извиняюсь (не тот файл выбрал). Но можно поподробнее объяснить фразу
    написал:
    xml-файл, который при исполнении переводится в структуры в памяти
    Каким образом осущесвляется этот перевод?
  • отредактировано 01:39
    Посмотрите исходники, fs_iinterpreter, fs_iilparser

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.