創建指向我沒有權限的目錄的符號連結
**先說一點歷史:**在我工作的地方,一些開發商/股東將他們的智慧財產權匯集在一起形成了公司。IP 仍然是他們自己的,單獨的,以及原始碼。
此外,幾年前我們還遇到了來自第 3 方的工業間諜活動的一些問題。所有這些都導致其中一些開發人員/公司所有者提出了非正統的措施,以確保即使被盜,我們的二進製文件也無法使用。
**目前問題:**我們正在租用一台超級電腦來做一些硬數字運算,以趕上最後期限。麻煩的是,萬一執行檔對深埋在我們網路目錄結構中的文本文件具有靜態依賴關係。
**為什麼不在沒有這種“依賴”的情況下重新編譯?**因為有問題的開發人員目前正在出差,並且預計不會在我們的截止日期之前返回以重新編譯此程式碼。
執行:
./run.sh
錯誤輸出:
forrtl: No such file or directory forrtl: severe (29): file not found, unit 1, file /foo/bar/.xyz Image PC Routine Line Source number_crunch 000000000048B933 Unknown Unknown Unknown number_crunch 0000000000499ADB Unknown Unknown Unknown number_crunch 0000000000445941 Unknown Unknown Unknown number_crunch 0000000000403BFE Unknown Unknown Unknown libc.so.6 00002AAAAB6C10BD Unknown Unknown Unknown number_crunch 0000000000403B09 Unknown Unknown Unknown
run.sh 的內容:
#!/bin/bash #SBATCH --nodes=10 #SBATCH --job-name=number_crunch #SBATCH --cpus-per-task=8 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/share/intel/ics2013/composer_xe_2013_sp1.2.144/compiler/lib/intel64/ module load glibc ./number_crunch
我需要的是:某種方式來欺騙二進製文件承認**
/foo/bar/.xyz
**結構,而沒有根權力。**這可能嗎?**我知道這
alias
不允許在別名中使用斜杠,並且ln
要求我有權在/
.
就地修補二進製文件怎麼樣?
strings yourbinary | grep -F /foo/bar/.xyz
應該列印出來/foo/bar/.xyz
。如果/foo/bar/.xyz
在字元串中足夠獨特,您可以這樣做:sed -i "s_/foo/bar/\.xyz_/control/.xyz_g" yourbinary
/control/
您可以控制的目錄在哪裡。替換字元串的長度(字節數)必須等於原始字元串的長度。如果替換字元串更短,您可以用空字節填充它:(sed -i "_/foo/bar/.xyz_/contr/xyz\x00\x00\x00_g" yourbinary
,o
,l
並且.
為空字節被刪除),但是這是否成功可能取決於 . 的長度是否存在硬編碼依賴關係/foo/bar/.xyz
。或者,您可以通過添加一些/
字元 (/tmp/////.xyz
) 來延長路徑。如果替換字元串較長,那麼您可能對這種就地修補方式不走運。但是,如果需要,您可以將其與符號連結解決方案結合使用,其中
/control/xyz
是一個合適長度的路徑,但它指向實際文件所在的更長路徑。如果您有專業知識並且需要更好地控制替換字元串的哪些實例,則可以使用十六進制編輯器而不是
sed
.在對它做任何重要的事情之前,我會測試這個變化。