Advertisement
Madmouse

Bored C magic

Nov 24th, 2015
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.91 KB | None | 0 0
  1. typedef void (*fun_ptr) (void);
  2. #define lambda(type, body) ({ type lambda body lambda; })
  3.  
  4.  
  5. void preinit(int argc, char **argv, char **envp)
  6. {
  7.     puts(__FUNCTION__);
  8. }
  9.  
  10. void init(int argc, char **argv, char **envp)
  11. {
  12.     puts(__FUNCTION__);
  13. }
  14.  
  15. void fini()
  16. {
  17.     puts(__FUNCTION__);
  18. }
  19.  
  20. __attribute__((section(".init_array"))) typeof(init)* __init = init;
  21. __attribute__((section(".preinit_array"))) typeof(preinit)* __preinit = preinit;
  22. __attribute__((section(".fini_array"))) typeof(fini)* __fini = fini;
  23.  
  24.  
  25. void  __attribute__((constructor)) constructor()
  26. {
  27.     puts(__FUNCTION__);
  28. }
  29.  
  30. void __attribute__((destructor)) destructor()
  31. {
  32.     puts(__FUNCTION__);
  33. }
  34.  
  35. int main(int argc, const char** argv, const char** envp)
  36. {
  37.     puts(__FUNCTION__);
  38.     lambda(fun_ptr, (){
  39.         puts("1");
  40.         return lambda(void, (){
  41.             puts("2");
  42.         });
  43.     })()();
  44.    
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement