SORU
17 NİSAN 2015, Cuma


Disassemble _start at ne işe yarar() C?

Ve bir yaz yürütebileceği benim iş arkadaşımdan öğrendimCyazmadan program main() bir fonksiyon. Altında da yapılabilir

withoutMain.c

// Compile it with gcc -nostartfiles

void _start() {
  int ret = my_main();
  exit(ret); 
}

int my_main() {
  puts("This is a program without main!\n");
  return 0; 
}

Bu gibi derleme : gcc -o withoutMain withoutMain.c –nostartfiles

Çalıştırmak gibi : ./ withoutMain

Benim sorum ne Zaman biri böyle bir şey yapmak istesin. Bazı gerçek dünya senaryo?

CEVAP
17 NİSAN 2015, Cuma


Sembolü _startgiriş noktasısenin programın. Yani, bu sembolün Adres programı başlatmak için üzerine atladı. Normalde, adı _start işlevi C çalışma zamanı ortamı için başlatma kodunu içeren bir dosya crt0.o adlı tarafından sağlanır. Bazı şeyler ayarlar, doldurur bağımsız değişkeni dizi argv, orada, ve sonra main çağrıları nasıl sayar. main sonra döner, exit denir.

Eğer bir programı C çalışma zamanı ortamı kullanmak istiyorsa, _start için kendi kod kaynağına ihtiyacı var. Örneğin, Git programlama dili referans uygulama yığını ile bazı sihirli gerektiren standart dışı bir iş parçacığı modeli ihtiyaçları var, çünkü öyle. Gerçekten küçük programlar ya da sıradışı şeyler yapmak programlar yazmak istediğinizde de kendi _start tedarik için yararlıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DeAdPiXel6667

    DeAdPiXel666

    2 Ocak 2010
  • george sarintzotis

    george sarin

    2 Aralık 2007
  • уσ ρℓz sυв ιℓℓ sυв вαcқ

    уσ ρℓz

    14 EKİM 2010