C \ C++ programının ana işlevinin yığın çerçevesinde, kaydedilmiş bir dönüş adresi ve kaydedilen bir yığın işaretçisi (ebp) var mı? Eğer öyleyse, nereye götürülecekleri, daha önce kaydedilecek herhangi bir yığın çerçevesi olmadığı için nereye bakarlar?Ana makine için yığın çerçevesinin kayıtlı bir çerçeve işaretçisi ve kaydedilmiş bir dönüş adresi var mı?
cevap
Gcc, MSVC ve muhtemelen diğer derleyiciler tarafından oluşturulan C \ C++ ikili dosyaları, kitaplığın bir parçası olan ve yürütülebilir dosyaya statik olarak bağlanan bir giriş noktası olan _start
'a sahiptir. İşletim sisteminin ELF/PE yükleyicisi, programın çalışması için bir yığın oluşturur ve zamanlamanın ardından CPU , - _start
değerini döndürür, daha sonra bazı kitaplığa özgü kurulum yapar ve main
. Bu nedenle, main
'un çağrılması üzerine, programın sonlandırılması için OS'ye bildirimde bulunmak üzere bir sistem çağrısı kullanan, clib işlevine geri dönen depolanmış bir geri dönüş adresi vardır. Bununla birlikte, yorumlarda da belirtildiği gibi, bu, dil standardının kendisi tarafından değil, mevcut sistemlerde en yaygın şekilde uygulandığı şekilde tanımlanmamaktadır.
MSVC'nin CRT uygulamasında '_start' adlı simge yoktur. Unicode konsol uygulaması için giriş noktası 'wmainCRTStartup' olarak adlandırılır. – IInspectable
Bu, C veya C++ dil özelliklerinin bir kısmı değildir. Bunlar uygulama detaylarıdır ve herhangi bir uygulama, uygun gördüğü şekilde bunu ele alabilir. “ana” genellikle işletim sistemi ile ilgili olarak giriş noktası değildir. Gerçek giriş noktası çoğu zaman dil desteği uygulamalarının bir parçasıdır (örn. CRT). – IInspectable
Genel olarak evet, fakat @IInspectable'ın işaret ettiği gibi, bu bir uygulama detayıdır ve ne C ne de C++ standardı tarafından garanti edilmez. –
C++ için, dil, "ana" den önce belirli kodların çalıştırılmasını gerektirir; bu da, kullanıcı alanında her ikisinin de onları çağırmaktan sorumlu olduğunu ima eder. – o11c