C++ classes: 02 侯捷 - C++ Startup 揭密:C++ 程序的生前和死后

less than 1 minute read

Published:

侯捷 - C++ Startup 揭密:C++ 程序的生前和死后. Also, see reference1

1. 前言,如何自定 Startup code

  • Bibliography
    • 《程序员的自我修养——链接、装载与库》,俞甲子/石凡/潘爱民 著,电子工业出版社
      • 侧重Linux
  • 自定Startup code(Entry-Point Symbol)
    • windows (use VC 6.0)

      #include <windows.h>
      int MyStartup(void)
      {
          int a = 10;
          HANDLE crtHeap = HeapCreate(HEAP_NO_SERIALIZE, 0x010, 4000 * 1024);
          int *p = (int *)HeapAlloc(crtHeap, HEAP_ZERO_MEMORY, 0x010);
          int i, j;
          for (i = 0; i < 100; i++)
          {
              // int j;
              for (j = 0; j < 100; j++, p++)
              {
                  *p = i * 100 + (j + 1);
              }
          }
      
          MessageBoxA(NULL, p, "abcd", MB_OK);
          return 0;
      }
      
    • Linux (compile with $ gcc entrypoint.c -e blabla, then blabla will be called instead of main)

      #include <stdio.h>
      
      int blabla()
      {
          printf("Yes it works!\n");
          exit(0);
      }
      
      int main()
      {
          printf("not called!\n");
      }