61bcdefg / Hikari-LLVM15

A fork of Hikari Obfuscator [WIP]
563 stars 153 forks source link

Windows MINGW64环境编译失败 #49

Closed Pure-Peace closed 1 year ago

Pure-Peace commented 1 year ago

x86 LLVM15

cmake -G "Ninja" -S ./Hikari-LLVM15/llvm -B ./build_dyn_x64 -DCMAKE_INSTALL_PREFIX=./llvm_x64 -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lld;" -DLLVM_TARGETS_TO_BUILD="X86" -DBUILD_SHARED_LIBS=ON -DLLVM_INSTALL_UTILS=ON -DLLVM_INCLUDE_TESTS=OFF -DLLVM_BUILD_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_BUILD_BENCHMARKS=OFF
$ cmake --build ./build_dyn_x64 -j 24
[5/2470] Linking CXX shared library bin\libLLVMObfuscation.dll
FAILED: bin/libLLVMObfuscation.dll lib/libLLVMObfuscation.dll.a
cmd.exe /C "cd . && E:\msys64\mingw64\bin\c++.exe -Wa,-mbig-obj -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-redun
dant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wmisleading-indentation -ffunction-sections -fdata-sections  -O2 -DNDEBUG  -Wl,--gc-sections -shared -o bin\libLLVMObfuscation.dll -Wl,--out-implib,lib\libLLVMObfuscation.d
ll.a -Wl,--major-image-version,0,--minor-image-version,0 lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/FunctionCallObfuscate.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/CryptoUtils.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/B
ogusControlFlow.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/SubstituteImpl.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/Substitution.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/Flattening.cpp.obj lib/Transforms/Obfusc
ation/CMakeFiles/LLVMObfuscation.dir/Utils.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/SplitBasicBlocks.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/AntiClassDump.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/AntiDebugg
ing.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/AntiHooking.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/StringEncryption.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/IndirectBranch.cpp.obj lib/Transforms/Obfuscation/C
MakeFiles/LLVMObfuscation.dir/FunctionWrapper.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/ConstantEncryption.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/Obfuscation.cpp.obj  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleau
t32 -luuid -lcomdlg32 -ladvapi32 && cd ."
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/CryptoUtils.cpp.obj:CryptoUtils.cpp:(.text$_ZN4llvm11CryptoUtils9prng_seedEv+0x2d): undefined reference to `llvm::errs()'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/CryptoUtils.cpp.obj:CryptoUtils.cpp:(.text$_ZN4llvm11CryptoUtils9prng_seedEv+0x60): undefined reference to `llvm::raw_ostr
eam::operator<<(llvm::format_object_base const&)'
...
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/FunctionWrapper.cpp.obj:FunctionWrapper.cpp:(.rdata$_ZTVN4llvm15FunctionWrapperE[_ZTVN4llvm15FunctionWrapperE]+0x68): unde
fined reference to `llvm::Pass::releaseMemory()'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/FunctionWrapper.cpp.obj:FunctionWrapper.cpp:(.rdata$_ZTVN4llvm15FunctionWrapperE[_ZTVN4llvm15FunctionWrapperE]+0x70): unde
fined reference to `llvm::Pass::getAdjustedAnalysisPointer(void const*)'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/FunctionWrapper.cpp.obj:FunctionWrapper.cpp:(.rdata$_ZTVN4llvm15FunctionWrapperE[_ZTVN4llvm15FunctionWrapperE]+0x78): unde
fined reference to `llvm::Pass::getAsImmutablePass()'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/FunctionWrapper.cpp.obj:FunctionWrapper.cpp:(.rdata$_ZTVN4llvm15FunctionWrapperE[_ZTVN4llvm15FunctionWrapperE]+0x80): unde
fined reference to `llvm::Pass::getAsPMDataManager()'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/FunctionWrapper.cpp.obj:FunctionWrapper.cpp:(.rdata$_ZTVN4llvm15FunctionWrapperE[_ZTVN4llvm15FunctionWrapperE]+0x88): unde
fined reference to `llvm::Pass::verifyAnalysis() const'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/FunctionWrapper.cpp.obj:FunctionWrapper.cpp:(.rdata$_ZTVN4llvm15FunctionWrapperE[_ZTVN4llvm15FunctionWrapperE]+0x90): unde
fined reference to `llvm::Pass::dumpPassStructure(unsigned int)'
collect2.exe: error: ld returned 1 exit status
[26/2444] Building CXX object lib/DebugInfo/CodeView/CMakeFiles/LLVMDebugInfoCodeView.dir/SymbolDumper.cpp.obj
ninja: build stopped: subcommand failed.
Naville commented 1 year ago

llvm/lib/Transforms/Obfuscation/CMakeLists.txt 加上对Support的依赖

Pure-Peace commented 1 year ago

llvm/lib/Transforms/Obfuscation/CMakeLists.txt 加上对Support的依赖

感谢回复!我尝试了一下,但是仍然编译失败了

Naville commented 1 year ago

应该还需要Core.

Pure-Peace commented 1 year ago

应该还需要Core.

add_llvm_component_library(LLVMObfuscation
    FunctionCallObfuscate.cpp
    CryptoUtils.cpp
    BogusControlFlow.cpp
    SubstituteImpl.cpp
    Substitution.cpp
    Flattening.cpp
    Utils.cpp
    SplitBasicBlocks.cpp
    AntiClassDump.cpp
    AntiDebugging.cpp
    AntiHooking.cpp
    StringEncryption.cpp
    IndirectBranch.cpp
    FunctionWrapper.cpp
    ConstantEncryption.cpp
    Obfuscation.cpp

    # ADDITIONAL_HEADER_DIRS #尝试过添加
    # ${LLVM_MAIN_INCLUDE_DIR}/llvm/Transforms/Obfuscation #尝试过添加

    DEPENDS
    intrinsics_gen
    # COMPONENT_NAME #尝试过添加
    # Obfuscation #尝试过添加

    LINK_COMPONENTS
    Analysis
    Core
    Support
    TransformUtils
)
target_compile_definitions(LLVMObfuscation PRIVATE "-DGIT_COMMIT_HASH=\"fd949f3034f8a422ecfffa889c2823485dde4bdd\"")

这是我的CMakeLists.txt,它还是编译失败了

[1787/3579] Linking CXX shared library bin\libLLVMObfuscation.dll
FAILED: bin/libLLVMObfuscation.dll lib/libLLVMObfuscation.dll.a
cmd.exe /C "cd . && E:\msys64\mingw64\bin\c++.exe -Wa,-mbig-obj -Werror=date-time -Wall -Wextra -Wno
-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-lo
ng -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-redundant-move -Wno-pes
simizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wmislead
ing-indentation -ffunction-sections -fdata-sections  -O2 -DNDEBUG  -Wl,--gc-sections -shared -o bin\
libLLVMObfuscation.dll -Wl,--out-implib,lib\libLLVMObfuscation.dll.a -Wl,--major-image-version,0,--m
inor-image-version,0 lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/FunctionCallObfuscate
.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/CryptoUtils.cpp.obj lib/Transform
s/Obfuscation/CMakeFiles/LLVMObfuscation.dir/BogusControlFlow.cpp.obj lib/Transforms/Obfuscation/CMa
keFiles/LLVMObfuscation.dir/SubstituteImpl.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfusca
tion.dir/Substitution.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/Flattening.c
pp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/Utils.cpp.obj lib/Transforms/Obfusc
ation/CMakeFiles/LLVMObfuscation.dir/SplitBasicBlocks.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/
LLVMObfuscation.dir/AntiClassDump.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/
AntiDebugging.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/AntiHooking.cpp.obj
lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/StringEncryption.cpp.obj lib/Transforms/Ob
fuscation/CMakeFiles/LLVMObfuscation.dir/IndirectBranch.cpp.obj lib/Transforms/Obfuscation/CMakeFile
s/LLVMObfuscation.dir/FunctionWrapper.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.
dir/ConstantEncryption.cpp.obj lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/Obfuscation
.cpp.obj  lib/libLLVMTransformUtils.dll.a  lib/libLLVMAnalysis.dll.a  lib/libLLVMCore.dll.a  lib/lib
LLVMSupport.dll.a  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomd
lg32 -ladvapi32 && cd ."
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/AntiDebugging.cpp.obj:AntiDebugging.cpp:
(.text$_ZN4llvm13AntiDebugging10initializeERNS_6ModuleE.isra.0+0x353): undefined reference to `llvm:
:parseIRFile(llvm::StringRef, llvm::SMDiagnostic&, llvm::LLVMContext&, llvm::function_ref<llvm::Opti
onal<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (llvm::String
Ref)>)'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/AntiDebugging.cpp.obj:AntiDebugging.cpp:
(.text$_ZN4llvm13AntiDebugging10initializeERNS_6ModuleE.isra.0+0x3ae): undefined reference to `llvm:
:Linker::linkModules(llvm::Module&, std::unique_ptr<llvm::Module, std::default_delete<llvm::Module>
>, unsigned int, std::function<void (llvm::Module&, llvm::StringSet<llvm::MallocAllocator> const&)>)
'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/AntiHooking.cpp.obj:AntiHooking.cpp:(.te
xt$_ZN4llvm8AntiHook16doInitializationERNS_6ModuleE[_ZN4llvm8AntiHook16doInitializationERNS_6ModuleE
]+0x348): undefined reference to `llvm::parseIRFile(llvm::StringRef, llvm::SMDiagnostic&, llvm::LLVM
Context&, llvm::function_ref<llvm::Optional<std::__cxx11::basic_string<char, std::char_traits<char>,
 std::allocator<char> > > (llvm::StringRef)>)'
E:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe
: lib/Transforms/Obfuscation/CMakeFiles/LLVMObfuscation.dir/AntiHooking.cpp.obj:AntiHooking.cpp:(.te
xt$_ZN4llvm8AntiHook16doInitializationERNS_6ModuleE[_ZN4llvm8AntiHook16doInitializationERNS_6ModuleE
]+0x3a1): undefined reference to `llvm::Linker::linkModules(llvm::Module&, std::unique_ptr<llvm::Mod
ule, std::default_delete<llvm::Module> >, unsigned int, std::function<void (llvm::Module&, llvm::Str
ingSet<llvm::MallocAllocator> const&)>)'
collect2.exe: error: ld returned 1 exit status
[1810/3579] Building CXX object lib/Target/X86/CMakeFiles/LLVMX86CodeGen.dir/X86ISelLowering.cpp.ob
In file included from E:/msys64/home/PurePeace/llvm-project/llvm/include/llvm/CodeGen/TargetLowering
.h:35,
                 from E:/msys64/home/PurePeace/llvm-project/llvm/lib/Target/X86/X86ISelLowering.h:18
,
                 from E:/msys64/home/PurePeace/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp:
14:
In member function 'void llvm::SelectionDAG::setFlagInserter(FlagInserter*)',
    inlined from 'llvm::SelectionDAG::FlagInserter::FlagInserter(llvm::SelectionDAG&, llvm::SDNodeFl
ags)' at E:/msys64/home/PurePeace/llvm-project/llvm/include/llvm/CodeGen/SelectionDAG.h:350:27,
    inlined from 'llvm::SDValue llvm::X86TargetLowering::LowerINTRINSIC_WO_CHAIN(llvm::SDValue, llvm
::SelectionDAG&) const' at E:/msys64/home/PurePeace/llvm-project/llvm/lib/Target/X86/X86ISelLowering
.cpp:26521:63:
E:/msys64/home/PurePeace/llvm-project/llvm/include/llvm/CodeGen/SelectionDAG.h:468:53: warning: stor
ing the address of local variable 'FlagsInserter' in '*DAG.llvm::SelectionDAG::Inserter' [-Wdangling
-pointer=]
  468 |   void setFlagInserter(FlagInserter *FI) { Inserter = FI; }
      |                                            ~~~~~~~~~^~~~
E:/msys64/home/PurePeace/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp: In member function 'l
lvm::SDValue llvm::X86TargetLowering::LowerINTRINSIC_WO_CHAIN(llvm::SDValue, llvm::SelectionDAG&) co
nst':
E:/msys64/home/PurePeace/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp:26521:30: note: 'Flags
Inserter' declared here
26521 |   SelectionDAG::FlagInserter FlagsInserter(DAG, Op->getFlags());
      |                              ^~~~~~~~~~~~~
E:/msys64/home/PurePeace/llvm-project/llvm/lib/Target/X86/X86ISelLowering.cpp:26521:30: note: 'DAG'
declared here
ninja: build stopped: subcommand failed.
61bcdefg commented 1 year ago

这是我的CMakeLists.txt,它还是编译失败了

再加上Linker和IRReader呢

Pure-Peace commented 1 year ago

这是我的CMakeLists.txt,它还是编译失败了

再加上Linker和IRReader呢

加上之后编译成功了,非常感谢两位大佬的解答!

我还有一个小小的疑问,因为我不是专业的C++开发人员,所以遇到这种错误感到非常困惑,这些报错信息里也看不出来什么东西,想知道遇到这种情况一般应该如何排查问题呢?

Naville commented 1 year ago

需要熟悉LLVM 才能知道缺的符号在哪

Pure-Peace commented 1 year ago

明白了,感谢