diff --git "a/content/posts/\347\247\273\346\244\215 OLLVM \345\210\260 LLVM 18\357\274\214C&C++\344\273\243\347\240\201\346\267\267\346\267\206.md" "b/content/posts/\347\247\273\346\244\215 OLLVM \345\210\260 LLVM 18\357\274\214C&C++\344\273\243\347\240\201\346\267\267\346\267\206.md" index 02985be..74436b1 100644 --- "a/content/posts/\347\247\273\346\244\215 OLLVM \345\210\260 LLVM 18\357\274\214C&C++\344\273\243\347\240\201\346\267\267\346\267\206.md" +++ "b/content/posts/\347\247\273\346\244\215 OLLVM \345\210\260 LLVM 18\357\274\214C&C++\344\273\243\347\240\201\346\267\267\346\267\206.md" @@ -1,6 +1,6 @@ +++ title = '移植 OLLVM 到 LLVM 18,C&C++代码混淆' -date = 2024-12-13T03:56:00.307813+08:00 +date = 2024-12-23T03:48:18.268921+08:00 draft = false +++ @@ -310,6 +310,73 @@ NF->splice(NF->begin(), F) +### **5.4 error C2664: “llvm::AllocaInst llvm::DemoteRegToStack** + + + +``` +[193/2642] Building CXX object lib\Passes\CMakeFiles\LLVMPasses.dir\Obfuscation\Utils.cpp.obj +FAILED: lib/Passes/CMakeFiles/LLVMPasses.dir/Obfuscation/Utils.cpp.obj +D:\App\VisualStudio\IDE\VC\Tools\MSVC\14.42.34433\bin\Hostx64\x64\cl.exe /nologo /TP -DUNICODE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -ID:\Projects\llvm-project\build\lib\Passes -ID:\Projects\llvm-project\llvm\lib\Passes -ID:\Projects\llvm-project\build\include -ID:\Projects\llvm-project\llvm\include /utf-8 /Zc:inline /Zc:preprocessor /Zc:__cplusplus /Oi /bigobj /permissive- /W4 -wd4141 -wd4146 -wd4244 -wd4267 -wd4291 -wd4351 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -wd4577 -wd4091 -wd4592 -wd4319 -wd4709 -wd5105 -wd4324 -w14062 -we4238 /Gw /O2 /Ob2 /DNDEBUG -std:c++17 -MD /EHsc /GR /showIncludes /Folib\Passes\CMakeFiles\LLVMPasses.dir\Obfuscation\Utils.cpp.obj /Fdlib\Passes\CMakeFiles\LLVMPasses.dir\LLVMPasses.pdb /FS -c D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(213): error C2664: “llvm::AllocaInst *llvm::DemoteRegToStack(llvm::Instruction &,bool,llvm::Instruction *)”: 无法将参数 3 从“llvm::ilist_iterator_w_bits”转换为“llvm::Instruction *” + with + [ + OptionsT=llvm::ilist_detail::node_options::type,true> + ] +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(213): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符 +D:\Projects\llvm-project\llvm\include\llvm/Transforms/Utils/Local.h(207): note: 参见“llvm::DemoteRegToStack”的声明 +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(213): note: 尝试匹配参数列表“(llvm::Instruction, bool, llvm::ilist_iterator_w_bits)” 时 + with + [ + OptionsT=llvm::ilist_detail::node_options::type,true> + ] +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(225): error C2664: “llvm::AllocaInst *llvm::DemotePHIToStack(llvm::PHINode *,llvm::Instruction *)”: 无法将 参数 2 从“llvm::ilist_iterator_w_bits”转换为“llvm::Instruction *” + with + [ + OptionsT=llvm::ilist_detail::node_options::type,true> + ] +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(225): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符 +D:\Projects\llvm-project\llvm\include\llvm/Transforms/Utils/Local.h(214): note: 参见“llvm::DemotePHIToStack”的声明 +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(225): note: 尝试匹配参数列表“(llvm::PHINode *, llvm::ilist_iterator_w_bits)”时 + with + [ + OptionsT=llvm::ilist_detail::node_options::type,true> + ] +``` +DemoteRegToStack 函数调用:在LLVM 18.1.8中,DemoteRegToStack 的参数包括: + +- 需要转为栈变量的 Instruction。 + +- 一个布尔值表示是否添加调试信息。 + +- 一个插入点指针,指定插入位置。 + + + +把 + +``` +DemoteRegToStack(*I, false, AllocaInsertionPoint->getIterator()); +``` +改为 + +``` +DemoteRegToStack(*Inst, false, AllocaInsertionPoint); // 修复函数调用 +``` + + +把 + +``` +DemotePHIToStack(cast(I), AllocaInsertionPoint->getIterator()); +``` +改为 + +``` +DemotePHIToStack(cast(Inst), AllocaInsertionPoint); // 修复函数调用 +``` + + ## **6. 其他** diff --git a/public/index.html b/public/index.html index 57bd9b3..0480d90 100644 --- a/public/index.html +++ b/public/index.html @@ -55,36 +55,36 @@

CYRUS STUDIO

  • - 移植 OLLVM 到 LLVM18,修复控制流平坦化报错 + 移植 OLLVM 到 LLVM 18,C&C++代码混淆 calendar - Dec 21, 2024 + Dec 23, 2024 - clock - 3 min read + 12 min read
  • - 移植 OLLVM 到 LLVM 18,C&C++代码混淆 + 移植 OLLVM 到 LLVM18,修复控制流平坦化报错 calendar - Dec 13, 2024 + Dec 21, 2024 - clock - 11 min read + 3 min read
  • diff --git a/public/index.xml b/public/index.xml index 0a2da8c..7f5f3d2 100644 --- a/public/index.xml +++ b/public/index.xml @@ -6,8 +6,15 @@ Recent content on CYRUS STUDIO Hugo zh-cn - Sat, 21 Dec 2024 23:02:07 +0800 + Mon, 23 Dec 2024 03:48:18 +0800 + + 移植 OLLVM 到 LLVM 18,C&C++代码混淆 + https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ + Mon, 23 Dec 2024 03:48:18 +0800 + https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ + 版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ OLLVM 简介 OLLVM (Obfuscator-LLVM) 是一个基于 LLVM 的代码混淆工具。 LLVM 是一个广泛使用的编译器框架,OLLVM 在其基础上提供了多种混淆技术,旨在增加程序逆向分析和反编译的难度,从而提高程序的安全性。 OLLVM 通过在编译过程中对中间表示(IR)和目标代码应用多种混淆技术,生成更加复杂和难以理解的二进制代码。 OLLVM 项目地址:https://github.com/obfuscator-llvm/obfuscator 下载源码 目前最新版本的是分支名为 llvm-4.0,基于 LLVM 团队发布的版本 4.0.1 最新版本的 LLVM 可以看这里:https://github.com/llvm/llvm-project/releases 下载 OLLVM 的 llvm-4.0 分支源码到本地 git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git 构建 OLLVM mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/ make -j7 OLLVM 项目介绍 obfuscator/ │ ├── include/llvm/Transforms/Obfuscation # 公共头文件目录 │ ├── BogusControlFlow.h # 虚假控制流头文件 │ ├── Flattening.h # 控制流平坦化头文件 │ ├── Split.h # 基本块拆分头文件 │ ├── Substitution. + 移植 OLLVM 到 LLVM18,修复控制流平坦化报错 https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm18%E4%BF%AE%E5%A4%8D%E6%8E%A7%E5%88%B6%E6%B5%81%E5%B9%B3%E5%9D%A6%E5%8C%96%E6%8A%A5%E9%94%99/ @@ -15,13 +22,6 @@ https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm18%E4%BF%AE%E5%A4%8D%E6%8E%A7%E5%88%B6%E6%B5%81%E5%B9%B3%E5%9D%A6%E5%8C%96%E6%8A%A5%E9%94%99/ 版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 前言 把 OLLVM 移植到 LLVM18 后,发现 -fla(控制流平坦化)并不能正常使用。 关于移植过程可以参考这篇文章 【移植 OLLVM 到 LLVM 18,C&C++代码混淆】 测试代码 fla.c #include <stdlib.h> int main(int argc, char** argv) { int a = atoi(argv[1]); if(a == 0) return 1; else return 10; return 0; } 使用 clang 编译并启用 Control Flow Flattening(控制流平坦化)报错如下: D:\Projects\llvm-project\build>clang -mllvm -fla fla.c -o fla.exe [OLLVM] run.PipelineStartEPCallback PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script. - - 移植 OLLVM 到 LLVM 18,C&C++代码混淆 - https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ - Fri, 13 Dec 2024 03:56:00 +0800 - https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ - 版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ OLLVM 简介 OLLVM (Obfuscator-LLVM) 是一个基于 LLVM 的代码混淆工具。 LLVM 是一个广泛使用的编译器框架,OLLVM 在其基础上提供了多种混淆技术,旨在增加程序逆向分析和反编译的难度,从而提高程序的安全性。 OLLVM 通过在编译过程中对中间表示(IR)和目标代码应用多种混淆技术,生成更加复杂和难以理解的二进制代码。 OLLVM 项目地址:https://github.com/obfuscator-llvm/obfuscator 下载源码 目前最新版本的是分支名为 llvm-4.0,基于 LLVM 团队发布的版本 4.0.1 最新版本的 LLVM 可以看这里:https://github.com/llvm/llvm-project/releases 下载 OLLVM 的 llvm-4.0 分支源码到本地 git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git 构建 OLLVM mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/ make -j7 OLLVM 项目介绍 obfuscator/ │ ├── include/llvm/Transforms/Obfuscation # 公共头文件目录 │ ├── BogusControlFlow.h # 虚假控制流头文件 │ ├── Flattening.h # 控制流平坦化头文件 │ ├── Split.h # 基本块拆分头文件 │ ├── Substitution. - 编译 LLVM 源码,使用 Clion 调试 clang https://cyrus-studio.github.io/blog/posts/%E7%BC%96%E8%AF%91-llvm-%E6%BA%90%E7%A0%81%E4%BD%BF%E7%94%A8-clion-%E8%B0%83%E8%AF%95-clang/ diff --git a/public/posts/index.html b/public/posts/index.html index b0ea7a8..6ebbf8a 100644 --- a/public/posts/index.html +++ b/public/posts/index.html @@ -55,36 +55,36 @@

    Posts

    • - 移植 OLLVM 到 LLVM18,修复控制流平坦化报错 + 移植 OLLVM 到 LLVM 18,C&C++代码混淆 calendar - Dec 21, 2024 + Dec 23, 2024 - clock - 3 min read + 12 min read
    • - 移植 OLLVM 到 LLVM 18,C&C++代码混淆 + 移植 OLLVM 到 LLVM18,修复控制流平坦化报错 calendar - Dec 13, 2024 + Dec 21, 2024 - clock - 11 min read + 3 min read
    • diff --git a/public/posts/index.xml b/public/posts/index.xml index cb44197..65784f9 100644 --- a/public/posts/index.xml +++ b/public/posts/index.xml @@ -6,8 +6,15 @@ Recent content in Posts on CYRUS STUDIO Hugo zh-cn - Sat, 21 Dec 2024 23:02:07 +0800 + Mon, 23 Dec 2024 03:48:18 +0800 + + 移植 OLLVM 到 LLVM 18,C&C++代码混淆 + https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ + Mon, 23 Dec 2024 03:48:18 +0800 + https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ + 版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ OLLVM 简介 OLLVM (Obfuscator-LLVM) 是一个基于 LLVM 的代码混淆工具。 LLVM 是一个广泛使用的编译器框架,OLLVM 在其基础上提供了多种混淆技术,旨在增加程序逆向分析和反编译的难度,从而提高程序的安全性。 OLLVM 通过在编译过程中对中间表示(IR)和目标代码应用多种混淆技术,生成更加复杂和难以理解的二进制代码。 OLLVM 项目地址:https://github.com/obfuscator-llvm/obfuscator 下载源码 目前最新版本的是分支名为 llvm-4.0,基于 LLVM 团队发布的版本 4.0.1 最新版本的 LLVM 可以看这里:https://github.com/llvm/llvm-project/releases 下载 OLLVM 的 llvm-4.0 分支源码到本地 git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git 构建 OLLVM mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/ make -j7 OLLVM 项目介绍 obfuscator/ │ ├── include/llvm/Transforms/Obfuscation # 公共头文件目录 │ ├── BogusControlFlow.h # 虚假控制流头文件 │ ├── Flattening.h # 控制流平坦化头文件 │ ├── Split.h # 基本块拆分头文件 │ ├── Substitution. + 移植 OLLVM 到 LLVM18,修复控制流平坦化报错 https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm18%E4%BF%AE%E5%A4%8D%E6%8E%A7%E5%88%B6%E6%B5%81%E5%B9%B3%E5%9D%A6%E5%8C%96%E6%8A%A5%E9%94%99/ @@ -15,13 +22,6 @@ https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm18%E4%BF%AE%E5%A4%8D%E6%8E%A7%E5%88%B6%E6%B5%81%E5%B9%B3%E5%9D%A6%E5%8C%96%E6%8A%A5%E9%94%99/ 版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 前言 把 OLLVM 移植到 LLVM18 后,发现 -fla(控制流平坦化)并不能正常使用。 关于移植过程可以参考这篇文章 【移植 OLLVM 到 LLVM 18,C&C++代码混淆】 测试代码 fla.c #include <stdlib.h> int main(int argc, char** argv) { int a = atoi(argv[1]); if(a == 0) return 1; else return 10; return 0; } 使用 clang 编译并启用 Control Flow Flattening(控制流平坦化)报错如下: D:\Projects\llvm-project\build>clang -mllvm -fla fla.c -o fla.exe [OLLVM] run.PipelineStartEPCallback PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script. - - 移植 OLLVM 到 LLVM 18,C&C++代码混淆 - https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ - Fri, 13 Dec 2024 03:56:00 +0800 - https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ - 版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ OLLVM 简介 OLLVM (Obfuscator-LLVM) 是一个基于 LLVM 的代码混淆工具。 LLVM 是一个广泛使用的编译器框架,OLLVM 在其基础上提供了多种混淆技术,旨在增加程序逆向分析和反编译的难度,从而提高程序的安全性。 OLLVM 通过在编译过程中对中间表示(IR)和目标代码应用多种混淆技术,生成更加复杂和难以理解的二进制代码。 OLLVM 项目地址:https://github.com/obfuscator-llvm/obfuscator 下载源码 目前最新版本的是分支名为 llvm-4.0,基于 LLVM 团队发布的版本 4.0.1 最新版本的 LLVM 可以看这里:https://github.com/llvm/llvm-project/releases 下载 OLLVM 的 llvm-4.0 分支源码到本地 git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git 构建 OLLVM mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/ make -j7 OLLVM 项目介绍 obfuscator/ │ ├── include/llvm/Transforms/Obfuscation # 公共头文件目录 │ ├── BogusControlFlow.h # 虚假控制流头文件 │ ├── Flattening.h # 控制流平坦化头文件 │ ├── Split.h # 基本块拆分头文件 │ ├── Substitution. - 编译 LLVM 源码,使用 Clion 调试 clang https://cyrus-studio.github.io/blog/posts/%E7%BC%96%E8%AF%91-llvm-%E6%BA%90%E7%A0%81%E4%BD%BF%E7%94%A8-clion-%E8%B0%83%E8%AF%95-clang/ diff --git "a/public/posts/\347\247\273\346\244\215-ollvm-\345\210\260-llvm-18cc++\344\273\243\347\240\201\346\267\267\346\267\206/index.html" "b/public/posts/\347\247\273\346\244\215-ollvm-\345\210\260-llvm-18cc++\344\273\243\347\240\201\346\267\267\346\267\206/index.html" index 919be8f..2d3f447 100644 --- "a/public/posts/\347\247\273\346\244\215-ollvm-\345\210\260-llvm-18cc++\344\273\243\347\240\201\346\267\267\346\267\206/index.html" +++ "b/public/posts/\347\247\273\346\244\215-ollvm-\345\210\260-llvm-18cc++\344\273\243\347\240\201\346\267\267\346\267\206/index.html" @@ -45,8 +45,8 @@ - - + + @@ -80,14 +80,14 @@

      移植 OLLVM 到 LLVM 18,C&C++代码混淆 calendar - Dec 13, 2024 + Dec 23, 2024
      clock - 11 min read + 12 min read
      @@ -254,7 +254,55 @@

      5.1 error

      改为

      NF->splice(NF->begin(), F)
       

      参考:https://github.com/DreamSoule/ollvm17/issues/37

      -

      6. 其他

      +

      5.4 error C2664: “llvm::AllocaInst llvm::DemoteRegToStack

      +
      [193/2642] Building CXX object lib\Passes\CMakeFiles\LLVMPasses.dir\Obfuscation\Utils.cpp.obj
      +FAILED: lib/Passes/CMakeFiles/LLVMPasses.dir/Obfuscation/Utils.cpp.obj
      +D:\App\VisualStudio\IDE\VC\Tools\MSVC\14.42.34433\bin\Hostx64\x64\cl.exe  /nologo /TP -DUNICODE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -ID:\Projects\llvm-project\build\lib\Passes -ID:\Projects\llvm-project\llvm\lib\Passes -ID:\Projects\llvm-project\build\include -ID:\Projects\llvm-project\llvm\include /utf-8 /Zc:inline /Zc:preprocessor /Zc:__cplusplus /Oi /bigobj /permissive- /W4 -wd4141 -wd4146 -wd4244 -wd4267 -wd4291 -wd4351 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -wd4577 -wd4091 -wd4592 -wd4319 -wd4709 -wd5105 -wd4324 -w14062 -we4238 /Gw /O2 /Ob2 /DNDEBUG -std:c++17 -MD  /EHsc /GR /showIncludes /Folib\Passes\CMakeFiles\LLVMPasses.dir\Obfuscation\Utils.cpp.obj /Fdlib\Passes\CMakeFiles\LLVMPasses.dir\LLVMPasses.pdb /FS -c D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp
      +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(213): error C2664: “llvm::AllocaInst *llvm::DemoteRegToStack(llvm::Instruction &,bool,llvm::Instruction *)”: 无法将参数 3 从“llvm::ilist_iterator_w_bits<OptionsT,false,false>”转换为“llvm::Instruction *”
      +        with
      +        [
      +            OptionsT=llvm::ilist_detail::node_options<llvm::Instruction,false,false,llvm::ilist_detail::extract_tag<>::type,true>
      +        ]
      +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(213): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
      +D:\Projects\llvm-project\llvm\include\llvm/Transforms/Utils/Local.h(207): note: 参见“llvm::DemoteRegToStack”的声明
      +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(213): note: 尝试匹配参数列表“(llvm::Instruction, bool, llvm::ilist_iterator_w_bits<OptionsT,false,false>)” 时
      +        with
      +        [
      +            OptionsT=llvm::ilist_detail::node_options<llvm::Instruction,false,false,llvm::ilist_detail::extract_tag<>::type,true>
      +        ]
      +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(225): error C2664: “llvm::AllocaInst *llvm::DemotePHIToStack(llvm::PHINode *,llvm::Instruction *)”: 无法将 参数 2 从“llvm::ilist_iterator_w_bits<OptionsT,false,false>”转换为“llvm::Instruction *”
      +        with
      +        [
      +            OptionsT=llvm::ilist_detail::node_options<llvm::Instruction,false,false,llvm::ilist_detail::extract_tag<>::type,true>
      +        ]
      +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(225): note: 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
      +D:\Projects\llvm-project\llvm\include\llvm/Transforms/Utils/Local.h(214): note: 参见“llvm::DemotePHIToStack”的声明
      +D:\Projects\llvm-project\llvm\lib\Passes\Obfuscation\Utils.cpp(225): note: 尝试匹配参数列表“(llvm::PHINode *, llvm::ilist_iterator_w_bits<OptionsT,false,false>)”时
      +        with
      +        [
      +            OptionsT=llvm::ilist_detail::node_options<llvm::Instruction,false,false,llvm::ilist_detail::extract_tag<>::type,true>
      +        ]
      +

      DemoteRegToStack 函数调用:在LLVM 18.1.8中,DemoteRegToStack 的参数包括:

      +
        +
      • +

        需要转为栈变量的 Instruction。

        +
      • +
      • +

        一个布尔值表示是否添加调试信息。

        +
      • +
      • +

        一个插入点指针,指定插入位置。

        +
      • +
      +

      +
      DemoteRegToStack(*I, false, AllocaInsertionPoint->getIterator());
      +

      改为

      +
      DemoteRegToStack(*Inst, false, AllocaInsertionPoint); // 修复函数调用
      +

      +
      DemotePHIToStack(cast<PHINode>(I), AllocaInsertionPoint->getIterator());
      +

      改为

      +
      DemotePHIToStack(cast<PHINode>(Inst), AllocaInsertionPoint); // 修复函数调用
      +

      6. 其他

      完整源码:https://github.com/CYRUS-STUDIO/LLVM

      参考:

        diff --git a/public/sitemap.xml b/public/sitemap.xml index 9c6a9b3..8d01653 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -3,16 +3,16 @@ xmlns:xhtml="http://www.w3.org/1999/xhtml"> https://cyrus-studio.github.io/blog/ - 2024-12-21T23:02:07+08:00 + 2024-12-23T03:48:18+08:00 https://cyrus-studio.github.io/blog/posts/ - 2024-12-21T23:02:07+08:00 + 2024-12-23T03:48:18+08:00 + + https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ + 2024-12-23T03:48:18+08:00 https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm18%E4%BF%AE%E5%A4%8D%E6%8E%A7%E5%88%B6%E6%B5%81%E5%B9%B3%E5%9D%A6%E5%8C%96%E6%8A%A5%E9%94%99/ 2024-12-21T23:02:07+08:00 - - https://cyrus-studio.github.io/blog/posts/%E7%A7%BB%E6%A4%8D-ollvm-%E5%88%B0-llvm-18cc++%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/ - 2024-12-13T03:56:00+08:00 https://cyrus-studio.github.io/blog/posts/%E7%BC%96%E8%AF%91-llvm-%E6%BA%90%E7%A0%81%E4%BD%BF%E7%94%A8-clion-%E8%B0%83%E8%AF%95-clang/ 2024-12-10T22:44:36+08:00