簡體   English   中英

“不允許操作”在El Capitan上運行帶有clang ++的hello world二進制編譯程序

[英]“Operation not permitted” running hello world binary compiled w/ clang++ on El Capitan

背景

我創建了一個簡單的Hello World C ++程序:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello World!" << endl;
    return 0;
}

然后像這樣用clang ++編譯它(g ++顯然指向OS X上的clang ++):

g++ helloworld-cpp.cpp

這將生成一個可執行文件a.out 在提示符下運行它會導致bash拋出錯誤Operation not permitted ,如下所示:

$ ./a.out
-bash: ./a.out: Operation not permitted

我嘗試過的事情

  1. 使用ls -leO驗證文件是否具有執行權限,並且沒有任何屬性或標志會阻止其運行:

    -rwxr-xr-x 1 monarch staff - 15212 Jan 1 13:51 a.out

  2. 從Recovery OS終端使用csrutil disable禁用“系統完整性保護”,重新引導,重新編譯和運行a.out 結果相同的錯誤消息。

還有其他限制可能會阻止我在Mac OS X上編譯的二進制文件運行嗎?

弄清楚了。

我的代碼在加密的sparseimage上,該圖像上設置了quarantined屬性。 我通過像這樣運行mount檢查了這一點(請參閱/Volumes/work上的屬性):

$ mount
/dev/disk0s2 on / (hfs, local, journaled)
/dev/disk2s2 on /Volumes/work (hfs, local, nodev, nosuid, journaled, noowners, quarantine, mounted by monarch)

實際的sparseimage位於我的主文件夾中,名為work.sparseimage 我這樣刪除了隔離屬性:

$ xattr -d com.apple.quarantine work_personal.sparseimage

然后,我卸載(彈出)映像,然后重新裝入它,重新編譯該文件,並且執行該命令時沒有錯誤。

特別感謝@Mark Setchell在問題的評論中問我是否在驅動器上設置了noexec ,並感謝其他所有人的建議。

暫無
暫無

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

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