Back to TILs

How to execute code before and after main function

Date: 2024-01-05Last modified: 2024-01-22

Table of contents

    
    #include <stdio.h>
    #include <stdlib.h>
    
    void my_before_main(void) __attribute__((constructor));
    void my_after_main(void) __attribute__((destructor));
    
    void my_before_main_2(void) __attribute__((constructor));
    void my_after_main_2(void) __attribute__((destructor(119)));
    
    __attribute__((destructor(120))) void my_after_main_3(void) {
      printf("start after main 3\n");
      return;
    }
    
    // BOth attributes can be specified on the same function
    void __attribute__((constructor)) __attribute__((destructor))
    another_before_and_after_main() {
      printf("%s called before and after main()\n", __PRETTY_FUNCTION__);
    }
    
    void my_before_main(void) {
      printf("start before main\n");
      return;
    }
    
    void my_after_main(void) {
      printf("start after main\n");
      return;
    }
    
    void my_before_main_2(void) {
      printf("start before main 2\n");
      return;
    }
    
    void my_after_main_2(void) {
      printf("start after main 2\n");
      return;
    }
    
    int main(int argc, char *argv[]) {
      printf("start in main\n");
      return 0;
    }