在MacOS上,我看到一個看起來像這樣的堆棧(在堆棧的頂部是一個陷阱代碼,但我想知道如何到達)有關MacOS上的__dyld__dyld_start等函數的更多信息
(gdb) where
...
#4 0x0000000112fdefc8 in appLibInit::appLibInit()
#5 0x0000000112fdef71 in __sti__$E()
#6 0x00007fff5fc112f7 in __dyld__ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE()
#7 0x00007fff5fc0d20c in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj()
#8 0x00007fff5fc0d1b0 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj()
#9 0x00007fff5fc0d1b0 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj()
#10 0x00007fff5fc0d1b0 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj()
#11 0x00007fff5fc0d2f4 in __dyld__ZN11ImageLoader15runInitializersERKNS_11LinkContextE()
#12 0x00007fff5fc038b4 in __dyld__ZN4dyld24initializeMainExecutableEv()
#13 0x00007fff5fc06ea1 in __dyld__ZN4dyld5_mainEPK11mach_headermiPPKcS5_S5_()
#14 0x00007fff5fc01695 in __dyld__ZN13dyldbootstrap5startEPK11mach_headeriPPKcl()
#15 0x00007fff5fc0103a in __dyld__dyld_start()
#16 0x0000000100000000 in ??()
#17 0x0000000000000001 in ??()
功能appLibInit :: appLibInit是在我們的代碼全局對象C++的構造函數,所以我猜我在某種預先主代碼,可能處理所有被鏈接的共享庫(奇怪的是,所討論的代碼並不是我們所期望的我們所鏈接的東西,除非它被別的東西拖拽)。
mac C++ filt似乎不能解碼這些__dyld前綴符號。
有沒有人知道一些描述MacOS進程啓動順序的文檔,這可能會讓我更加了解這裏正在發生的事情?