批量獲取bin/lib鏈接庫依賴關係的shell腳本

一、腳本編寫

適配系統的時候,需要查找一些依賴文件,手工用winhex或UltraEdit來找挺麻煩的。

所以寫了個shell腳本,用來批量取得這些依賴關係。

在linux系統下,把如下內容存爲getNEED.sh

#/bin/bash
#by benjaminwan V0.2
printf "**************************************\n"
printf "please put this shell to system folder\n"
printf "**************************************\n"

function getNeed()
{
    echo '<<<<<<getting NEED for '$1'>>>>>>'
    case $1 in
      lib/hw)
        name=lib_hw
        ;;
      vendor/bin)
        name=vendor_bin
        ;;
      vendor/lib)
        name=vendor_lib
        ;;
      vendor/lib/hw)
        name=vendor_lib_hw
        ;;
      *)
        name=$1
        ;;
    esac

    if [ ! -d $1 ];then
        printf "can't find $1 folder!\n"
    else
        ls $1 -p | grep [^/]$ > info_$name.txt
        cat info_$name.txt |while read line
        do
            echo "getting NEED for" $line
            echo $line >> Need_$name.txt
            objdump -x $1/$line | grep "NEEDED" >> Need_$name.txt
            echo "*************************************" >> Need_$name.txt
        done
        rm info_$name.txt
    fi
}

getNeed bin;
getNeed lib;
getNeed lib/hw;
getNeed vendor/bin;
getNeed vendor/lib;
getNeed vendor/lib/hw;
printf "**********Completed!**********\n"

二、使用說明

以下操作均在linux下完成(在linux的ext3或ext4文件系統下操作),首先確保你的linux有objdump這個程序

把ROM解壓,再把getNEED.sh複製到system目錄

打開shell並定位到system目錄。
#先給權限
chmod a+x getNEED.sh
再執行
./getNEED.sh



執行完畢後,目錄下生成的NEED_xxx.txt就是批量列出的依賴關係文件

如果文件不含NEEDED,則代表此文件無依賴關係,或者不能被objdump識別


如何解讀(例):

adb
  NEEDED               libc.so
  NEEDED               libstdc++.so
  NEEDED               libm.so

*************************************

此段含義:

adb這個程序,需要libc.so、libstdc++.so、libm.so這三個文件

========================================================================================

附加知識:

有時候缺lib,並不提示文件名,而是提示一串比如:_ZN3net15

這個時候可以通過這個命令來查找

grep -r "_ZN3net15" *


發佈了67 篇原創文章 · 獲贊 37 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章