Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.60 KB | None | 0 0
  1. допустим вместо лиспа у нас сишко-лисп...
  2. для начала VM заинтерпретирует + закомпилирует весь код, а потом
  3. создаст исполняемый файл из того что получилось.
  4. ----------------------------------
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8.  
  9. // compile time функция может модифицировать
  10. // все что угодно, пока vm не создала итоговый ELF
  11. // можно заполнять структуры, переименовывать функции
  12. // оно работает как будто бы выполняется во время исполнения,
  13. // но все выполняется во время конпиляции... есть доступ ко всему
  14. // и при этом 0 оверхеда!
  15. void get_username(char **p):compile_time {
  16.     // <s> будет существовать только в compile time
  17.     char *s = get_unix_username();
  18.  
  19.     // выделяем память в "результатном"-ELF
  20.     *p = alloc_in_outfile(strlen(s) + 1);
  21.     strcpy(*p, s);
  22.    
  23. }
  24.  
  25. int main() {
  26.     char *username;
  27.    
  28.     get_username(&username);
  29.     printf("Written by %s\n", username);
  30. }
  31.  
  32. -------------------------------
  33. ну и результат псевдоассемблером
  34. -------------------------------
  35. segment code
  36.   main:
  37.     mov eax, string001
  38.     mov esi, string002
  39.     call printf
  40.  
  41.     mov eax, 0
  42.     call exit
  43.  
  44. segment data
  45.   string001 db "Written by %s", 0xA, 0
  46.   string002 db "Vladimir", 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement