簡體   English   中英

gcc 生成具有執行權限的共享 object

[英]gcc generates shared object with execute permissions

我正在使用 gcc 在 linux 上構建一個共享庫。 我沒有收到任何編譯或鏈接錯誤,但我的共享 object 始終設置了執行位(盡管 readelf 表明它是一個共享對象)。 我只是這樣做:

> echo "int f() {return 1;}" > a.cpp
> gcc -c a.cpp
> gcc -shared -o liba.so a.o
> ls -l liba.so
-rwxr-xr-x 1 me me 6652 2011-06-09 17:05 liba.so

為什么共享 object 會設置執行位?

因為通常您可以執行共享庫。 大多數共享庫在您執行它們時會崩潰,但您可以執行它們。

一些庫定義了一個入口點(-Wl,-e,the_name_of_your_entry_point,標准 C 程序中的主要 function),然后您可以在不崩潰的情況下執行它們。

例如,HP-UX 要求共享庫是可執行的。 如果不是,則動態加載程序的 memory map 將失敗,權限被拒絕。 並且大概在其他平台上有一個 x 位並沒有什么壞處,因此 GCC 采取安全路線並設置 x 位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM