# set -ex VERSION=${1:-14} OUT=./out LOGIC=2 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 remove-imports $OUT/a -o $OUT/a > $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 out/a 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