2017-02-21 71 views
0

所以我試圖在我的C程序中爲main設置我自己的自定義名稱,並且我找到了this答案。重寫主程序的入口點的可能的缺點

您可以使用-e標誌指定一個入口點到您的程序ld。 這意味着如果你喜歡,你可以重寫入口點,但是你可能不想爲你打算在你的機器上正常運行的C程序這麼做,因爲start可能會在你的程序運行之前做各種操作系統特定的東西。

什麼是不是要求從crt0.o_start和寫我自己的,還是隻是因爲無論我希望它的(可能)的缺點?

+3

如果未調用_start,則運行時未初始化,因此調用運行時提供的* any *函數可能未定義。 – EOF

+0

大概只有在交叉編譯(開發),你想用自己的替換它。但是,那麼你會想要用你自己的方式來覆蓋整個運行時間和啓動。 –

+1

在託管環境中,您不能在符合C程序的C語義入口點使用不同的名稱。入口點名稱和簽名由語言定義。無論如何,如果可以的話,你不清楚自己有什麼優勢。 –

回答

1

入口點通常不會這樣的東西

  • 準備參數並調用mainmain之前處理其exit
  • 呼叫global constructors和析構函數後
  • 填充全局變量,如environ之類
  • 初始化C運行時,例如timezonestdio流,這樣
  • 也許configure x87使用80位浮點
  • 膨脹和零.bss如果您的裝載機不
  • 其他任何需要託管C程序平臺
上運行

這些東西與您的C實現緊密相連,所以通常只有當您定位freestanding environment時,您才提供自己的_start