main関数以外から関数を呼び出す

#include <stdio.h>
#include <stdlib.h>

void ctor()
{
  puts("ctor");
}

void dtor()
{
  puts("dtor");
}

void (*fp1)(void) __attribute__((section(".ctors"))) = ctor;
void (*fp2)(void) __attribute__((section(".dtors"))) = dtor;

void __attribute__((constructor)) init()
{
  puts("init");
}

void __attribute__((destructor)) finit()
{
  puts("finit");
}


int main()
{
  puts("main1");
  exit(0);
  puts("main2");
  return 0;
}

普通にコンパイル(GCCで)して実行すると以下のような出力になる。

init
ctor
main1
dtor
finit