Ben gcc etkin değil ayıklama bile, bir yerlerde meta veri olarak ikili kaynak dosya adı içerdiğini bu son cevap öğrendik.
Oldukça. Modern ELF nesnede gerçekten bir dosya adı Boyutu tip FILE
bir sembolüdür:
Ancak bir kez soyulmuş, sembol gitmiş
$ readelf bignum.o # Source bignum.c
[...]
Symbol table (.symtab) contains 36 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FILE LOCAL DEFAULT ABS bignum.c
2: 0000000000000000 0 SECTION LOCAL DEFAULT 1
3: 0000000000000000 0 SECTION LOCAL DEFAULT 3
4: 0000000000000000 0 SECTION LOCAL DEFAULT 4
5: 0000000000000000 0 SECTION LOCAL DEFAULT 5
6: 0000000000000000 0 SECTION LOCAL DEFAULT 6
7: 0000000000000000 0 SECTION LOCAL DEFAULT 7
8: 0000000000000000 0 SECTION LOCAL DEFAULT 8
9: 00000000000003f0 172 FUNC GLOBAL DEFAULT 1 add
10: 00000000000004a0 104 FUNC GLOBAL DEFAULT 1 copy
:
$ strip bignum.o
$ readelf -all bignum.o | grep bignum.c
$
Yani, gizliliğinizi korumak yürütülebilir şerit, veya -s
ile derleyin/bağlayın.
Sadece GCC değil, Clang bunu yapar (ve [spesifikasyon] 'u takip eden ELF ikili dosyalarını oluşturan herhangi bir derleyici araç zinciri (http://flint.cs.yale.edu/cs422/doc/ELF_Format.pdf)). – cyphar
@cyphar Sadece 60 sayfanın tamamını okumak yerine içine girdiğimi itiraf ettim, ancak bu belgenin sadece sayfa 25'inde belirtilen DOSYA'yı buldum ve bunun zorunlu olduğunu söylemiyor ("Geleneksel olarak, sembolün adı" nesne dosyası ile ilişkili kaynak dosya. –
Ayrıca, 60 sayfanın hepsini okumadım. Ama standartlara gelince “geleneksel olarak”, “bunu yapman gerekiyor çünkü insanlar buna güvenebilir”. Günün sonunda, bir özellik verilirse, mektubunuza uymak daha kolaydır (kullanıcılarınız standartta ifade edilen en ezoterik özellikleri kullanmaya karar verebilirlerse), denemek ve yolunuzu yitirmek yerine zorunda olmadığınız şeyleri uygulamak. Her şeyden önce, GNU, fazladan ekstra özelliklerin ülkesidir. – cyphar