Skip to content

Instantly share code, notes, and snippets.

@uzxmx
Created January 28, 2018 08:55
Show Gist options
  • Save uzxmx/41a5d8ba498ceecca28e9d1069a32ede to your computer and use it in GitHub Desktop.
Save uzxmx/41a5d8ba498ceecca28e9d1069a32ede to your computer and use it in GitHub Desktop.

Revisions

  1. uzxmx created this gist Jan 28, 2018.
    77 changes: 77 additions & 0 deletions enable_nativebridge
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,77 @@
    #!/system/bin/sh

    PATH=/system/bin:/system/xbin

    houdini_bin=0
    dest_dir=/system/lib$1/arm$1
    binfmt_misc_dir=/proc/sys/fs/binfmt_misc

    if [ -z "$1" ]; then
    if [ "`uname -m`" = "x86_64" ]; then
    v=7_y
    url=http://goo.gl/SBU3is
    else
    v=7_x
    url=http://goo.gl/0IJs40
    fi
    else
    v=7_z
    url=http://goo.gl/FDrxVN
    fi

    if [ -s /system/lib$1/libhoudini.so ]; then
    log -pi -thoudini "found /system/lib$1/libhoudini.so"
    elif [ -e /system/etc/houdini$v.sfs ]; then
    mount /system/etc/houdini$v.sfs $dest_dir
    else
    if mountpoint -q $dest_dir; then
    kill -9 `fuser -m $dest_dir`
    umount -f $dest_dir
    fi
    mkdir -p /data/arm
    cd /data/arm
    while ! mount houdini$v.sfs $dest_dir; do
    while [ "$(getprop net.dns1)" = "" ]; do
    sleep 10
    done
    wget $url -cO houdini$v.sfs && continue
    rm -f houdini$v.sfs
    sleep 30
    done
    fi

    [ -s /system/lib$1/libhoudini.so ] || mount --bind $dest_dir/libhoudini.so /system/lib$1/libhoudini.so

    # this is to add the supported binary formats via binfmt_misc

    if [ ! -e $binfmt_misc_dir/register ]; then
    mount -t binfmt_misc none $binfmt_misc_dir
    fi

    cd $binfmt_misc_dir
    if [ -e register ]; then
    [ -e /system/bin/houdini$1 ] && dest_dir=/system/bin
    # register Houdini for arm binaries
    if [ -z "$1" ]; then
    echo ':arm_exe:M::\\x7f\\x45\\x4c\\x46\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x28::'"$dest_dir/houdini:P" > register
    echo ':arm_dyn:M::\\x7f\\x45\\x4c\\x46\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\x28::'"$dest_dir/houdini:P" > register
    else
    echo ':arm64_exe:M::\\x7f\\x45\\x4c\\x46\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\xb7::'"$dest_dir/houdini64:P" > register
    echo ':arm64_dyn:M::\\x7f\\x45\\x4c\\x46\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x00\\xb7::'"$dest_dir/houdini64:P" > register
    fi
    if [ -e arm${1}_exe ]; then
    houdini_bin=1
    fi
    else
    log -pe -thoudini "No binfmt_misc support"
    fi

    if [ $houdini_bin -eq 0 ]; then
    log -pe -thoudini "houdini$1 enabling failed!"
    else
    log -pi -thoudini "houdini$1 enabled"
    fi

    [ "$(getprop ro.zygote)" = "zygote64_32" -a -z "$1" ] && exec $0 64

    exit 0