스크립트의 입력이 덜 구체적입니다.

스크립트의 입력이 덜 구체적입니다.

얼마 전, 내가 사용하는 기능에 영향을 주지 않고 Android ROM에서 무엇을 제거할 수 있는지 알아낼 수 있는 방법을 찾고 있을 때 deptree. xda forums이 내용이 2012년에 작성되었기 때문에 예상대로 작동하지 않았습니다. 사용된 도구( dex2jar, smali, ...)를 업데이트하고 스크립트를 약간 변경하고( Android예: 폴더를 지금 사용 중인 폴더로 변경하는 등) 다시 실행했습니다 system/app-private. 마법의 일부는 이와 유사한 세 가지 스크립트에서 발생합니다. system/priv-app/*/

while [ -n "$1" ]; do
    for bin in "$1"/*; do
        [ -f "$bin" ] || continue
        case "$bin" in
            *.so)
            ;;
            *)
            [ -x "$bin" ] || continue
            ;;
        esac
        "$FILE_DIR/perls/parse_bin.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_bin.log"
    done
shift
done

코딩을 전혀 배우지 않는 나의 초능력을 활용하여 저는 다음과 같은 일이 일어나고 있다는 결론을 내렸습니다. (제가 틀렸다면 수정해 주세요.)

  1. 입력 폴더에 접근하면 $1,
  2. 모든 bin(ary)파일은
  3. 그것이 정말로 파일인지 확인 binary하고 그렇다면,
    (무슨 뜻인지 모르겠습니다 ||)
  4. 확장자( .so또는 none)를 확인하고
  5. 발견된 파일( *.so및 확장자가 없는 파일)을 스크립트에 대한 입력으로 사용parse_bin.pl

입력 폴더는 매우 구체적이어야 합니다. 이 스크립트의 경우 다음과 같습니다.

$ACTIVE_DB/rom/system/lib $ACTIVE_DB/rom/system/lib/*/ $ACTIVE_DB/rom/system/usr/lib you get how this continues, super long list of folders

제가 알고 싶은 것은 입력 폴더가 가 되도록 이 세 가지 스크립트를 어떻게 수정해야 합니까 $ACTIVE_DB/rom/system?

편집: 입력 폴더에서 파일을 찾는 메커니즘은 다른 두 스크립트가 검색하고 있다는 점을 제외하면 세 스크립트 모두에서 동일합니다 *.jar.*.apk

EDIT2: bash쉘은 이것을 실행하는 데 사용됩니다.

fromnaboo나는 이것이 스크립트의 처음 두 줄에서 발생해야 한다는 것을 알고 있으며 대답을 시도했습니다.여기폴더 내의 모든 바이너리 파일을 내보내 $ACTIVE_DB/rom지만 에 입력으로 전달하지는 않습니다 parse_bin.pl.

로그를 남겨주세요:

+ PARSE_BIN DB_45763/rom/system
+ '[' -n DB_45763/rom/system ']'
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/CSCVersion.txt ']'
+ case "$bin" in
+ '[' -x DB_45763/rom/system/CSCVersion.txt ']'
+ printf 'DB_45763/rom/system/CSCVersion.txt:\t'
+ echo DB_45763/rom/system/CSCVersion.txt
+ ./files/perls/parse_bin.pl DB_45763/rom/system/CSCVersion.txt dbi:SQLite:dbname=DB_45763/test.sqlite
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/app ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/bin ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/build.prop ']'
+ case "$bin" in
+ '[' -x DB_45763/rom/system/build.prop ']'
+ printf 'DB_45763/rom/system/build.prop:\t'
+ echo DB_45763/rom/system/build.prop
+ ./files/perls/parse_bin.pl DB_45763/rom/system/build.prop dbi:SQLite:dbname=DB_45763/test.sqlite
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/cameradata ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/csc ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/csc_contents ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/etc ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/fonts ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/framework ']'
+ continue
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/kern_sec_info ']'
+ case "$bin" in
+ '[' -x DB_45763/rom/system/kern_sec_info ']'
+ printf 'DB_45763/rom/system/kern_sec_info:\t'
+ echo DB_45763/rom/system/kern_sec_info
+ ./files/perls/parse_bin.pl DB_45763/rom/system/kern_sec_info dbi:SQLite:dbname=DB_45763/test.sqlite
+ for bin in '"$1"/*'
+ '[' -f DB_45763/rom/system/lib ']'
+ continue
+ shift
+ '[' -n '' ']'

답변1

첫째, 스크립트 기능에 대한 귀하의 가정이 올바른 것 같습니다. 및 에 있는 모든 파일, 폴더, 심볼릭 링크 등을 살펴보고 $1, 파일인 경우 라이브러리인지 실행 파일인지 확인하기 위해 더 깊이 파고듭니다.

쉘 스크립트에서 $1이는 스크립트에 전달되는 첫 번째 인수이므로 $ACTIVE_DB/rom/system해당 위치에서 이 스크립트를 실행 하려면 $1다음을 사용하십시오.

./scriptname $ACTIVE_DB/rom/system

참고: 명령 프롬프트에서 이 명령을 호출하는 경우 $ACTIVE실제 경로를 바꿔야 합니다.

이 스크립트가 대상 디렉터리로 재귀적으로 내려가도록 하려면 이를 스크립트에 추가해 볼 수 있습니다.

while [ -n "$1" ]; do
    # use globbing to descend into all subdirectories
    for bin in $(find "$1" | tr '\n' ' '); do
    # change this  ^^^^   
        [ -f "$bin" ] || continue
        # leave the rest of the script as is
        # ....

답변2

그래서 내가 무엇을 했는지 궁금해하는 사람이 있다면 여기에 현재 코드가 있습니다.
도와주신 @the_velour_fog에게 감사드립니다.
누군가 이것이 최악의 해결책이라고 생각한다면
(저도 그것이 아주 섹시하다고 생각하지는 않지만 해야 할 일을 합니다), 여기로 가져오십시오.

    while [ -n "$1" ]; do
    for bin in $(find "$1"); do
        [ -f "$bin" ] || continue
        case "$bin" in
            *.so)
                export start=$(date +"%T")
                printf "$bin:\t"
                echo -n "$start  " >>"$ACTIVE_DB/logs/parse_bin.log"
                echo "$bin" >>"$ACTIVE_DB/logs/parse_bin.log"
                "$FILE_DIR/perls/parse_bin.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_bin.log"
                ;;
            *.jar)
                export start=$(date +"%T")
                printf "$bin:\t"
                echo -n "$start  " >>"$ACTIVE_DB/logs/parse_jar.log"
                echo "$bin" >>"$ACTIVE_DB/logs/parse_jar.log"
                "$FILE_DIR/perls/parse_jar.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_jar.log"
                ;;
            *.apk)
                export start=$(date +"%T")
                printf "$bin:\t"
                echo -n "$start  " >>"$ACTIVE_DB/logs/parse_apk.log"
                echo "$bin" >>"$ACTIVE_DB/logs/parse_apk.log"
                "$FILE_DIR/perls/parse_apk.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_apk.log"
                ;;
            *)
                if [ -x "$bin" ] ; then
                    export start=$(date +"%T")
                    printf "$bin:\t"
                    echo -n "$start  " >>"$ACTIVE_DB/logs/parse_bin.log"
                    echo "$bin" >>"$ACTIVE_DB/logs/parse_bin.log"
                    "$FILE_DIR/perls/parse_bin.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_bin.log"
                else
                    continue
                fi
                ;;
        esac
    done
shift
done

내가 아는 한 이것은 가능하지만 이 마지막 부분에 대해서는 잘 모르겠습니다.

     *)
            if [ -x "$bin" ] ; then
                export start=$(date +"%T")
                printf "$bin:\t"
                echo -n "$start  " >>"$ACTIVE_DB/logs/parse_bin.log"
                echo "$bin" >>"$ACTIVE_DB/logs/parse_bin.log"
                "$FILE_DIR/perls/parse_bin.pl" "$bin" dbi:SQLite:dbname="$ACTIVE_DB/test.sqlite" 2>>"$ACTIVE_DB/logs/parse_bin.log"
            else
                continue
            fi

미래가 보여요^^

관련 정보