2023-06-05 15:54:22 +07:00
|
|
|
# set -ex
|
2023-05-31 16:17:45 +07:00
|
|
|
|
2023-06-05 15:54:22 +07:00
|
|
|
VERSION=${1:-14}
|
2023-05-31 16:17:45 +07:00
|
|
|
OUT=./out
|
2023-06-01 17:29:45 +07:00
|
|
|
LOGIC=2
|
2023-05-31 16:17:45 +07:00
|
|
|
|
|
|
|
mkdir -p $OUT
|
2023-06-01 17:29:45 +07:00
|
|
|
|
2023-06-05 15:54:22 +07:00
|
|
|
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
|
|
|
|
|
2023-06-02 15:24:09 +07:00
|
|
|
if [[ $LOGIC -eq 0 ]]
|
|
|
|
then
|
|
|
|
|
|
|
|
clang-format -i -style=llvm *.cc
|
|
|
|
|
|
|
|
elif [[ $LOGIC -eq 1 ]]
|
2023-06-01 17:29:45 +07:00
|
|
|
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
|
|
|
|
|
2023-06-05 15:54:22 +07:00
|
|
|
out/a
|
|
|
|
|
2023-06-01 17:29:45 +07:00
|
|
|
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
|