Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- допустим вместо лиспа у нас сишко-лисп...
- для начала VM заинтерпретирует + закомпилирует весь код, а потом
- создаст исполняемый файл из того что получилось.
- ----------------------------------
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- // compile time функция может модифицировать
- // все что угодно, пока vm не создала итоговый ELF
- // можно заполнять структуры, переименовывать функции
- // оно работает как будто бы выполняется во время исполнения,
- // но все выполняется во время конпиляции... есть доступ ко всему
- // и при этом 0 оверхеда!
- void get_username(char **p):compile_time {
- // <s> будет существовать только в compile time
- char *s = get_unix_username();
- // выделяем память в "результатном"-ELF
- *p = alloc_in_outfile(strlen(s) + 1);
- strcpy(*p, s);
- }
- int main() {
- char *username;
- get_username(&username);
- printf("Written by %s\n", username);
- }
- -------------------------------
- ну и результат псевдоассемблером
- -------------------------------
- segment code
- main:
- mov eax, string001
- mov esi, string002
- call printf
- mov eax, 0
- call exit
- segment data
- string001 db "Written by %s", 0xA, 0
- string002 db "Vladimir", 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement