Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error building for macOS #4

Closed
rruipinheiro opened this issue Nov 18, 2022 · 5 comments
Closed

Error building for macOS #4

rruipinheiro opened this issue Nov 18, 2022 · 5 comments

Comments

@rruipinheiro
Copy link

Hello,

I'm having problems compiling the obfuscator llvm on macOS.
Any suggestion?

**LLVM: ** 14.0.6
**macOS SDK: ** 13.0

Output error

➜  build: ninja -j8
[5/5] Linking CXX shared library libLLVMObfuscator.dylib
FAILED: libLLVMObfuscator.dylib 
: && /Library/Developer/CommandLineTools/usr/bin/c++ -Wall -Wextra -Wno-unused-parameter -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.0.sdk -mmacosx-version-min=12.6 -dynamiclib -Wl,-headerpad_max_install_names  -o libLLVMObfuscator.dylib -install_name @rpath/libLLVMObfuscator.dylib CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o CMakeFiles/LLVMObfuscator.dir/utils/Utils.cpp.o CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o -L/usr/local/Cellar/llvm@14/14.0.6/lib -Wl,-rpath,/usr/local/Cellar/llvm@14/14.0.6/lib  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMCore.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMSupport.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMBinaryFormat.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMRemarks.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMBitstreamReader.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMSupport.a  -lm  /Library/Developer/CommandLineTools/SDKs/MacOSX13.0.sdk/usr/lib/libz.tbd  /Library/Developer/CommandLineTools/SDKs/MacOSX13.0.sdk/usr/lib/libcurses.tbd  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMDemangle.a && :
Undefined symbols for architecture x86_64:
  "llvm::ValueMapper::mapValue(llvm::Value const&)", referenced from:
      llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*) in BogusControlFlow.cpp.o
  "llvm::ValueMapper::ValueMapper(llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*)", referenced from:
      llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*) in BogusControlFlow.cpp.o
  "llvm::ValueMapper::~ValueMapper()", referenced from:
      llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*) in BogusControlFlow.cpp.o
  "llvm::CloneBasicBlock(llvm::BasicBlock const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::Twine const&, llvm::Function*, llvm::ClonedCodeInfo*, llvm::DebugInfoFinder*)", referenced from:
      llvm::BogusControlFlow::createAlteredBasicBlock(llvm::BasicBlock*, llvm::Twine const&, llvm::Function*) in BogusControlFlow.cpp.o
  "llvm::DemotePHIToStack(llvm::PHINode*, llvm::Instruction*)", referenced from:
      llvm::fixStack(llvm::Function*) in Utils.cpp.o
  "llvm::DemoteRegToStack(llvm::Instruction&, bool, llvm::Instruction*)", referenced from:
      llvm::fixStack(llvm::Function*) in Utils.cpp.o
  "llvm::SubstitutionPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)", referenced from:
      llvm::detail::PassModel<llvm::Function, llvm::SubstitutionPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) in Plugin.cpp.o
  "llvm::SubstitutionPass::SubstitutionPass()", referenced from:
      llvm::addPassWithName(llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >&, llvm::StringRef&) in Plugin.cpp.o
  "llvm::SplitBasicBlockPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)", referenced from:
      llvm::detail::PassModel<llvm::Function, llvm::SplitBasicBlockPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) in Plugin.cpp.o
  "llvm::SplitBasicBlockPass::SplitBasicBlockPass()", referenced from:
      llvm::addPassWithName(llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >&, llvm::StringRef&) in Plugin.cpp.o
  "llvm::FlatteningObfuscatorPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)", referenced from:
      llvm::detail::PassModel<llvm::Function, llvm::FlatteningObfuscatorPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) in Plugin.cpp.o
  "llvm::FlatteningObfuscatorPass::FlatteningObfuscatorPass()", referenced from:
      llvm::addPassWithName(llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >&, llvm::StringRef&) in Plugin.cpp.o
  "llvm::Function::viewCFG() const", referenced from:
      llvm::BogusControlFlow::bogus(llvm::Function&) in BogusControlFlow.cpp.o
      llvm::BogusControlFlow::doF(llvm::Module&) in BogusControlFlow.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
@PatriceBlin
Copy link
Member

Hi @rruipinheiro,

Are you building from a machine with an x86_64 CPU or an ARM one (Apple M1) ?

@rruipinheiro
Copy link
Author

Hi @PatriceBlin,
From a x86_64 CPU machine

@PatriceBlin
Copy link
Member

Looks like we are missing at least a link with LLVMTransformUtils

Could you try the following change ?

diff --git a/CMakeLists.txt b/CMakeLists.txt
index bcc03d2..8d93263 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,7 +38,7 @@ add_library(LLVMObfuscator SHARED Plugin.cpp)
 target_include_directories(LLVMObfuscator PRIVATE ${CMAKE_SOURCE_DIR})
 target_include_directories(LLVMObfuscator PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 
-target_link_libraries(LLVMObfuscator LLVMCore LLVMSupport)
+target_link_libraries(LLVMObfuscator LLVMCore LLVMSupport LLVMTransformUtils)
 
 option(BUILD_DUMMY "Build dummy plugin" OFF)
 if(BUILD_DUMMY)

Might not resolve all missing symbols, but at least reduce the list.

@rruipinheiro
Copy link
Author

I manage to get it to work by adding the link LLVMInterpreter and target_link_libraries(LLVMObfuscator "$<$<PLATFORM_ID:Darwin>:-undefined dynamic_lookup>")

@MarkMjw
Copy link

MarkMjw commented Sep 26, 2023

building error on MacOS 13.6 (M1 Pro MacBook)

Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin22.6.0
cmake version 3.27.6

[1/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:20:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:535:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(tmpA, key);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:651:3: error: use of undeclared identifier 'LOAD64H'
  LOAD64H(iseed, ctr + 8);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:653:3: error: use of undeclared identifier 'STORE64H'
  STORE64H(ctr + 8, iseed);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:728:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ret, tmp);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:741:3: error: use of undeclared identifier 'LOAD64H'
  LOAD64H(ret, tmp);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:780:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ks[0], k);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:781:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ks[1], k + 4);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:782:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ks[2], k + 8);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:783:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ks[3], k + 12);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:812:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(state0, in + 0);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:813:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(state1, in + 4);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:814:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(state2, in + 8);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:815:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(state3, in + 12);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:861:3: error: use of undeclared identifier 'STORE32H'
  STORE32H(out + 0, state0);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:862:3: error: use of undeclared identifier 'STORE32H'
  STORE32H(out + 4, state1);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:863:3: error: use of undeclared identifier 'STORE32H'
  STORE32H(out + 8, state2);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:864:3: error: use of undeclared identifier 'STORE32H'
  STORE32H(out + 12, state3);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:914:5: error: use of undeclared identifier 'LOAD32H'
    LOAD32H(W[i], buf + (4 * i));
    ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
[2/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/substitution/Substitution.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/substitution/Substitution.cpp:23:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
[3/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/bogus/BogusControlFlow.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/bogus/BogusControlFlow.cpp:99:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
[4/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/flattening/Flattening.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/flattening/Flattening.cpp:25:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
[5/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/split/SplitBasicBlocks.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/split/SplitBasicBlocks.cpp:20:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
[6/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/Plugin.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/Plugin.cpp:12:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
ninja: build stopped: subcommand failed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants