首页
社区
课程
招聘
[原创] obfuscator-llvm-4.0 的 VS2019 x86 修正编译
发表于: 2019-9-12 16:51 6132

[原创] obfuscator-llvm-4.0 的 VS2019 x86 修正编译

2019-9-12 16:51
6132

官方


我方
git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git

cd obfuscator
mkdir mybuild
mkdir mybin

cd mybuild

#设置CMake路径
set path=D:\ProgramData\CMake\bin;%path%

#初始化VS2019编译器
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars32.bat"

# 构建 VS2017 project,用VS2019编译,make version 3.11.0-rc4 支持最高VS2017版本工程生成
#可考虑换高版本cmake
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=c:\obfuscator\mybin -G "Visual Studio 15 2017" ..

#编译并安装 到 c:\obfuscator\mybin
cmake --build . --config Release --target install

编译的7个错误
“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\lib\Transforms\Vectorize\LLVMVectorize.vcxproj”(默认目标) (140) ->
(ClCompile 目标) ->
  C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.22.27905\include\xtree(1730): error
 C3848: 具有类型“const llvm::slpvectorizer::BoUpSLP::scheduleBlock::ScheduleDataCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool llvm::slpvectorizer::BoUpSLP::scheduleBlock::ScheduleDataCompare::operator ()(llvm::slpvectorizer::BoUpSLP::ScheduleData *,llvm::slpvectorizer::BoUpSLP::ScheduleData *)” (编译源文件 C:\obfuscator\lib\Transforms\Vectorize\
SLPVectorizer.cpp) [C:\obfuscator\mybuild\lib\Transforms\Vectorize\LLVMVectorize.vcxproj]
  C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.22.27905\include\xtree(1720): error
 C3848: 具有类型“const llvm::slpvectorizer::BoUpSLP::scheduleBlock::ScheduleDataCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool llvm::slpvectorizer::BoUpSLP::scheduleBlock::ScheduleDataCompare::operator ()(llvm::slpvectorizer::BoUpSLP::ScheduleData *,llvm::slpvectorizer::BoUpSLP::ScheduleData *)” (编译源文件 C:\obfuscator\lib\Transforms\Vectorize\
SLPVectorizer.cpp) [C:\obfuscator\mybuild\lib\Transforms\Vectorize\LLVMVectorize.vcxproj]


“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\llvm-objdump\llvm-objdump.vcxproj”(默认目标) (264) ->
(Link 目标) ->
  LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\llvm-objdump\llvm-objdump.vcxproj]


“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\llvm-pdbdump\llvm-pdbdump.vcxproj”(默认目标) (266) ->
  LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\llvm-pdbdump\llvm-pdbdump.vcxproj]


“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\llvm-symbolizer\llvm-symbolizer.vcxproj”(默认目标) (275) ->
  LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\llvm-symbolizer\llvm-symbolizer.vcxproj]


“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\sancov\sancov.vcxproj”(默认目标) (280) ->
  LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\sancov\sancov.vcxproj]


“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\sanstats\sanstats.vcxproj”(默认目标) (281) ->
  LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\sanstats\sanstats.vcxproj]

    81 个警告
    7 个错误

错误修正,C3848,微软官方指导意见是加上const限定


于是我们修改 C:\obfuscator\lib\Transforms\Vectorize\SLPVectorizer.cpp 源码,加上const


工程编译找不到“atls.lib”的问题,打开相应的工程文件
(1)将所有 %(AdditionalLibraryDirectories) 替换位 %(AdditionalLibraryDirectories);%(AdditionalLibraryDirectories);C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.22.27905\atlmfc\lib\x86
一般每个工程文件有四处需要替换
(2)对于非x86版,需要更换上述相应路径

修正添加lib搜索路径


C:\obfuscator\mybuild\tools\llvm-objdump\llvm-objdump.vcxproj
C:\obfuscator\mybuild\tools\llvm-pdbdump\llvm-pdbdump.vcxproj
C:\obfuscator\mybuild\tools\llvm-symbolizer\llvm-symbolizer.vcxproj
C:\obfuscator\mybuild\tools\sancov\sancov.vcxproj
C:\obfuscator\mybuild\tools\sanstats\sanstats.vcxproj

对于编译后运行/dev/random出错的问题
我们将 C:\obfuscator\lib\Transforms\Obfuscation\CryptoUtils.cpp 中的linux随机初始化key,改为window的srand和rand实现
#include <time.h>
void tritium_init_rand_key(char * buf,unsigned int buflen) {
    unsigned int i;
    srand(time(NULL));
    for (i = 0; i < buflen; i++) {
        buf[i] = char(rand() & 0xFF);
    }
}
 
#define __tritium__
bool CryptoUtils::prng_seed() {
#ifdef __tritium__
    tritium_init_rand_key(key, 16);
    DEBUG_WITH_TYPE("cryptoutils", dbgs() << "cryptoutils seeded with time srand and rand\n");
    memset(ctr, 0, 16);
    // Once the seed is there, we compute the
    // AES128 key-schedule
    aes_compute_ks(ks, key);
    seeded = true;
    return true;
#else
  //原函数体代码
#endif // __tritium__
}

再次编译安装
cmake --build . --config Release --target install




[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 4839
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
这个是啥啥
2019-9-12 17:16
0
雪    币: 243
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
直接给个修好的吧
2019-9-13 11:37
0
雪    币: 233
活跃值: (6701)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
4
大佬,可以给个修好的吗,,我好菜
2020-3-3 00:13
0
雪    币: 233
活跃值: (6701)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
5
大佬,可以放个改好的CryptoUtils.cpp吗,或者截一下修改的部分,有点没闹明白
2020-3-3 14:54
0
雪    币: 23
活跃值: (57)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
实际使用llvm的时候 vs2019提示只支持llvm10.0以上,有无搞过的大佬,可以在vs2019使用llvm4.0吗
2021-3-24 16:41
0
游客
登录 | 注册 方可回帖
返回
//