Paylaşılan kütüphaneler neden çalıştırılabilir?


59

Neden hemen hemen tüm paylaşılan kütüphaneler /usr/lib/yürütülebilir izin bitini ayarladı? Onları çalıştırmak için herhangi bir kullanım örneği göremiyorum. Bazıları mainkısa bir telif hakkı ve sürüm notu basmak için bir tür işlev bağlamayı başarır, ancak birçoğu bunu yapmaz ve yürütme sırasında farklılaşır.

Peki, bunu ayarlamanın amacı xnedir? Tüm kütüphane paketleyicileri bunu yapmalı mı? İzinleri dlopen()olan paylaşılan bir kütüphane edersem ne olur 0644?


3
Hangi işletim sistemlerinde (eğer Linux, hangi dağıtımda)? Debian sıkıştırmasında, yalnızca çalıştırılabilir paylaşılan kütüphaneler /libve /usr/liblibc ve libpthread'tir ve her ikisi de yürütüldüğünde telif hakkı uyarısı yazdırır.
Gilles 'SO- kötü olmaktan vazgeç'

Segfault yaparlarsa, muhtemelen küçük hatalardır. Karşılaştıysanız onları rapor ederim. Dağıtım nedir?
Faheem Mitha

@Faheem: main()Bir giriş noktası olarak bir simgeye sahip olmamak küçük bir hata değil, temel bir tasarım tercihidir. Amacımı özledin.
Tadeusz A. Kadłubowski

2
@Gilles: 755'i RedHat ailesi Linux sistemlerinde (Fedora ve Centos) ve Solaris'te varsayılan izin seçeneği olarak gördüm.
Tadeusz A. Kadłubowski

Bu sorunun temeli evrensel olarak doğru değildir. Aslında Debian Linux için yukarıda da belirtildiği gibi yanlış; ve ayrıca FreeBSD ve OpenBSD için yanlıştır.
JdeBP

Yanıtlar:


32

HP-UX altında, paylaşılan kitaplıklar mmap () kullanılarak belleğe eşlenir ve sistemdeki tüm bellek sayfalarında, çekirdek ve işlemci donanımının bellek sayfası koruma mekanizmalarıyla birleştirilmiş koruma bitleri bulunur. Sistemdeki herhangi bir bellek sayfasının içeriğini yürütmek için, o sayfada PROT_EXEC ayarlanmış olmalıdır - veri yürütme istismarlarını önlemek için kullanışlı bir özellik.

Mmap () çağrısı, içerdiği haritalanmış hafıza sayfalarının koruma bitlerini tanımlamak için eşleneceği dosyadaki izin bitlerini kullanır: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (sys / mman.h adresinden). bu nedenle paylaşılan bir kütüphanenin HP-UX'te kullanılabilmesi için, paylaşılan kütüphaneyi içeren dosyanın, eşlenen kütüphanenin de yürütme iznine sahip olduğundan emin olmak için yürütme izinleri olması gerekir.

HP-UX sisteminde 644 modlu paylaşılan bir kütüphane çekirdek dökümlerine neden olur.


Muhtemelen diğer Unix uygulamaları da bu özelliği kullanmaktadır.
Tadeusz A. Kadłubowski

> HP-UX ("Hewlett Packard Unix" den), Hewlett Packard Enterprise’ın UNIX Sistem V’e dayanan Unix işletim sisteminin tescilli uygulamasıdır
David 天宇 Wong

Başka bir örnek, ayrı debuginfo paketleriyle rpm paketleri oluşturmanın paylaşılan kütüphaneler üzerinde çalıştırma izinleri gerektirmesidir, aksi takdirde find-debuginfo.sh bunları işlemeyi atlar.
Domen Vrankar 19

20

Çalıştırılamayan paylaşılan nesneler iyi çalışır, ancak çalıştırılabilir olarak işaretlenen kitaplıklar bağımsız programlar olarak da çalıştırılabilir.

Peki, bu x ayarının amacı nedir?

Yok, sürüm veya başka bilgiler yayınlamalarını istemiyorsanız

Tüm kütüphane paketleyicileri bunu yapmalı mı?

Hayır

0644 iznine sahip paylaşılan bir kütüphaneyi dlopen () edersem ne olur?

Yeni bir paylaşılan nesne tanıtıcısı alacaksınız (dosya okunabilir olduğu sürece vs.) ... exec biti bunu etkilemiyor


Bağımsız çalıştırılabilirler olarak kullanılamayan kitaplıkların neden exec bit kümesine sahip oldukları konusunda: bu muhtemelen kullanılan derleme sisteminin veya link komut dosyasının yalnızca bir eseridir.


sadece çıktı için örnek çıktı:

$ /lib/i386-linux-gnu/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10) stable release version 2.15, by Roland McGrath et al.
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.6.3.
Compiled on a Linux 3.2.14 system on 2012-04-19.
Available extensions:
    crypt add-on version 2.1 by Michael Glad and others
    GNU Libidn by Simon Josefsson
    Native POSIX Threads Library by Ulrich Drepper et al
    BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.

11
.So kütüphanelerinin çoğu, normal main()giriş noktasına benzeyen hiçbir şeyleri olmadığı için basitçe farklılık gösterir . Libc bir aykırıdır. Geliştiricileri bu notu ekstra bir işlevsellik olarak yaptılar. chmod a+xBaşka herhangi bir kütüphane basit size bu işlevselliği vermeyecektir` Ben hala +xtüm kütüphaneler için ayar noktası göremiyorum .
Tadeusz A. Kadłubowski

Kabul edildi ve muhtemelen sadece .soidam edilebilecek kişiler bu şekilde işaretlenmelidir. Exec bit setiyle her şeyin gerçekten bağımsız bir çalıştırılabilir olduğunu ima etmemek için cevabımı değiştireceğim.
Yararsız

5
"Ldd" komutu genellikle dinamik linker, ld-linux-x86-64.so.2 veya /lib/ld-linux.so.2 veya benzerlerini çağıran bir sh betiğidir. Dinamik linker her zaman paylaşılan bir nesnedir.
Bruce Ediger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.