[Linux] 用 strace 找出 7zip 載入解碼器 Codecs 的路徑
最近專案的程式有用到 lib7zip 來呼叫 7zip,
不過有個奇怪的問題,就是用 WinRAR 作出來的 .rar 檔案,
如果「檔案名稱」有加密的話 (如下),我呼叫 lib7zip 的程式是解不出來的,但是 7z 本身可以:
當然如果去查 7zip 的原始碼的話,應該是有機會挖出來差別在哪裡,
問題是 7zip 的原始碼相當的龐大,要理解它應該不是一時三刻可以搞定…
後來用 strace 意外地解決了問題~
用 strace 跑一下 7z 時,有瞄到一些 Codecs 的字串快速的閃過去,來 grep 看看:
testuser@localhost ~ $ strace tool/p7zip/7z l enc_filename.rar 2>&1 | egrep -i codec lstat("tool/p7zip/Codecs", {st_mode=S_IFDIR|0755, st_size=21, ...}) = 0 openat(AT_FDCWD, "tool/p7zip/Codecs", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3 lstat("tool/p7zip/Codecs/.", {st_mode=S_IFDIR|0755, st_size=21, ...}) = 0 lstat("tool/p7zip/Codecs/..", {st_mode=S_IFDIR|0755, st_size=76, ...}) = 0 lstat("tool/p7zip/Codecs/Rar29.so", {st_mode=S_IFREG|0755, st_size=102568, ...}) = 0 open("tool/p7zip/Codecs/Rar29.so", O_RDONLY|O_CLOEXEC) = 4
看來 7z 會去找 Codecs 目錄下的 Rar29.so,感覺這裡很可疑,
是不是 Rar29.so 裡面有提供一些資訊,讓 7z 可以解開上面那種「檔案名稱加密」的 RAR 檔案呢?
同樣用 strace 跑一下自己的程式,果然找不到 Codecs 這個字串出現…
在目錄下增加一個 symbolic link 指向 p7zip 的 Codecs 目錄,就解決問題了,
我的程式也能用到 Codecs 下的 Rar29.so 並解開「檔案名稱加密」的 RAR 檔案囉~
感謝 strace 這次的幫忙呀~^^
(本頁面已被瀏覽過 248 次)