# set -ex VERSION=${1:-14} OUT=./out LOGIC=3 mkdir -p $OUT echo "using mach-o version $VERSION" if [[ $VERSION -ge 14 ]] then echo "Resulting binary uses MODERN symbol resolver" else echo "Resulting binary uses LEGACY symbol resolver" fi if [[ $LOGIC -eq 0 ]] then clang-format -i -style=llvm *.cc elif [[ $LOGIC -eq 1 ]] then # full poc flow echo "to be continue" # remove imports # remove mod init # remove symtab dysymtab # fix link edit section elif [[ $LOGIC -eq 2 ]] then # remove imports test # libc to test reexport custom lib clang++ -mmacosx-version-min=$VERSION -o $OUT/libc.dylib -shared c.cc # create our dummy lib first clang++ -mmacosx-version-min=$VERSION -o $OUT/libb.dylib -shared -Wl,-reexport_library out/libc.dylib dummy.cc # build a references libb clang++ -mmacosx-version-min=$VERSION -o $OUT/a -L"./out" -lb a.cc # extract symbols from a ../../macho-go/bin/ios-wrapper pepe -o $OUT/a-fixed -b $OUT/b.bcell --remove-imports --remove-exports --remove-symbol-table $OUT/a ../../macho-go/bin/ios-wrapper bcell2header -b $OUT/b.bcell -o $OUT/b.h # build libb with symbols extracted from a clang++ -mmacosx-version-min=$VERSION -o $OUT/libb.dylib -shared -Wl,-reexport_library out/libc.dylib b.cc codesign --force --deep -s - $OUT/a-fixed $OUT/a-fixed elif [[ $LOGIC -eq 3 ]] then # remove imports test # libc to test reexport custom lib clang++ -mmacosx-version-min=$VERSION -o $OUT/libc.dylib -shared c.cc # create our dummy lib first clang++ -mmacosx-version-min=$VERSION -o $OUT/libb.dylib -shared -Wl,-reexport_library out/libc.dylib dummy.cc # build a references libb clang -fobjc-arc -ObjC -mmacosx-version-min=$VERSION -o $OUT/a -L"./out" -lb a.mm # extract symbols from a ../../macho-go/bin/ios-wrapper pepe -o $OUT/a-fixed -b $OUT/b.bcell --remove-imports --remove-exports --remove-symbol-table $OUT/a ../../macho-go/bin/ios-wrapper bcell2header -b $OUT/b.bcell -o $OUT/b.h # build libb with symbols extracted from a clang++ -mmacosx-version-min=$VERSION -o $OUT/libb.dylib -shared -Wl,-reexport_library out/libc.dylib b.cc codesign --force --deep -s - $OUT/a-fixed # export OBJC_PRINT_LOAD_METHODS=1 # export OBJC_PRINT_CLASS_SETUP=1 $OUT/a-fixed # unset OBJC_PRINT_LOAD_METHODS # unset OBJC_PRINT_CLASS_SETUP else # dummy test build clang++ -mmacosx-version-min=$VERSION -o $OUT/libc.dylib -shared c.cc clang++ -mmacosx-version-min=$VERSION -o $OUT/libb.dylib -shared -Wl,-reexport_library out/libc.dylib b.cc clang++ -mmacosx-version-min=$VERSION -o $OUT/a -L"./out" -lb a.cc fi