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
- 1. Java'da Ana Makine Adı İçin IP Adresi?
- 2. Yükseltme işaretçisi kapsayıcıları için bir öncelik_ bağdaştırıcısı bağdaştırıcısı var mı?
- 3. Windows'ta bilinen ana bilgisayarlar için kesin bir yol var mı?
- 4. x86 montajı için yığın çerçevesinin çizilmesi
- 5. Javascript'te hangi ana makine betiğinin yüklendiğini bilmek için herhangi bir yol var mı? javascript içinde
- 6. Geçersiz yığın adresi ve ölümcül sinyal 11
- 7. Sadece ana makine adı bir dize
- 8. Android java.net.UnknownHostException: Ana makine çözülmemiş (strateji sorusu)
- 9. .NET için bir veritabanı agnostik nosql çerçeve var mı?
- 10. Sıra ve yığın koleksiyonları var mı?
- 11. ASP.NET MVC'de soyut kimlik doğrulaması için bir çerçeve var mı?
- 12. Kullanıcı etkinliğini izlemek için çerçeve var mı?
- 13. HTML/JavaScript'te bir dosyayı yüklemeyi ve yüklemeyi ve yüklenmediğinde geri dönüş yapmanın bir yolu var mı?
- 14. Bir Xen tabanlı sanal makine içinde çalışıp çalışmadığını belirlemek için çalıştırabileceğim bir OS komutu var mı
- 15. Android'den eksiksiz bir yığın izi görmenin bir yolu var mı?
- 16. facebook tuvalinde ana pencereyi itmek için bir yol var mı?
- 17. Kayıtlı işlemlerimde PRINT'i kullanmanın bir dezavantajı var mı?
- 18. Ana makine uygulamasının Roottable Engine
- 19. Unity 5.1 Ağ - Ana makine ve tüm istemciler için bir nesne olarak bir nesne oluştur
- 20. İşaretçinin herhangi bir adresi veya bellek ayırması var mı?
- 21. Celery AsyncResult ana makine adı almak
- 22. Docker-makine IP adresi çakışması İşte
- 23. Tüm ana makine ip adreslerini dinlemek için owin/Katana'yı yapılandırma
- 24. Bir JasperViewer göründüğünde ve kapattığımda, ana çerçeve/ebeveyn
- 25. Kovaryans bildirmek için bir yol var mı?
- 26. C için bir wxWidgets çerçevesi var mı?
- 27. Bir veri çerçevesinin diğerlerinden çıkarılması
- 28. Wamp Sanal Ana Makine Ayarı
- 29. Şablonlu bir işlevin tüm şablon argümanları için bir makine kodu sürümüne sahip olma olasılığı var mı?
- 30. Blackberry'de bir Dize biçiminde yığın özelliğinin yığın izini almanın bir yolu var mı?
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