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

  • DorkmanScott

    DorkmanScott

    14 NİSAN 2006
  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • TheRightTire

    TheRightTire

    14 EKİM 2009