Вверх ↑
Ответов: 2059
Рейтинг: 132
#1: 2019-01-16 12:23:59 ЛС | профиль | цитата
nesco, Да.
Давно делал, где-то компьютера два назад. Забросил.
Что-то типа Lua.
Только без всяких dll, и виртуальной машины для чтения скриптов.
Язык саморасширяющейся, с возможностью сохранения самого себя.
Все примитивы Win API. С небольшими переделками работает и под Linux.
Если это прикладная программа, то объявляем какую-то функцию главной, она и будет точкой входа куда передаётся управление после загрузки файла.
Сделал "целевую компиляцию" в ассемблерный код Delphi.
То-есть, получаем текст программы, который вставляется в IC, или в *.pas компонента.
code

ODE CompareAnyStr ( Str1 Str2 = Result )
POP EAX, EBX
PUSH 1
OR EAX, EAX
JZ SHORT @@2
OR EBX, EBX
JZ SHORT @@2
PUSH ESI, EDI
XCHG EAX, ESI
MOV EDI, EBX
XOR EAX, EAX
LODSB
MOVZX ECX, BYTE PTR [EDI]
INC EDI
MOV DL, AL
MOV DH, CL
CMP ECX, EAX
JBE SHORT @@6
XCHG EAX, ECX
@@6: JCXZ SHORT @@7
@@4: LODSB
CALL TOUP
PUSH EAX
MOV AL, [EDI]
INC EDI
CALL TOUP
MOV [ESP+1], AL
POP EAX
CMP AL, AH
JA SHORT @@1
JB SHORT @@3
LOOP @@4
@@7: CMP DL, DH
JA SHORT @@1
JZ SHORT @@5
@@3: DEC DWP [ESP+8]
@@5: DEC DWP [ESP+8]
@@1: POP EDI, ESI
@@2: RET
TOUP:
MOVZX EAX, AL
PUSH EDX, ECX, EAX
CALL CHARUPPERA
POP ECX, EDX
RET
END-CODE
Причём, только тех функций, которые задействованы, а не всего ядра.
Передача параметров в\из Delphi, C++ через стек. Внутри себя, и через регистры, и через стек. Код шустрый получается.

Вчера спешил, по этому нашел какой-то exe-шник сделанный на этом языке, конвертировал его в dll, а dll перевёл в скрипт IC.
P.S.
Перед новым годом сделал компилятор для LUA.
Тоже самое, компиляция скрипта в exe и скрипт для delphi.
Это не JIT-компиляция, как это делается официально http://luajit.org/luajit.html, а всё по честному.
Смысл в этом небольшой, скрипты и нужны, чтобы чего-то моделировать и менять на ходу. Но для exe-шника вполне справедливо.
Буду выкладывать, много чего наделал Lua-Hiasm.
Сейчас у меня беда с компьютером.
Сегодня купил винт и материнку, но похоже этим не обойтись.
карма: 6

0
Редактировалось 4 раз(а), последний 2019-01-16 14:15:04