我写了一个通过插件混淆,我想加载这个插件使用clang
而不是opt
在Windows中。但是,当我使用.\bin\clang++.exe -O1 -Xclang -fpass-plugin='./BronyaObfus.dll' -passes=bogus-control-flow .\test.cpp -o .\a.exe
命令时,clang抛出一个错误:
clang++: error: unknown argument: '-passes=bogus-control-flow'
字符串
然后使用.\bin\clang++.exe -O1 -Xclang -fpass-plugin='./BronyaObfus.dll' -mllvm --bogus-control-flow .\test.cpp -o .\a.exe
它没有像预期的那样加载相应的传递(bogus-control-flow),而是加载了所有的传递。
这是我的注册码:
llvm::PassPluginLibraryInfo getBronyaObfusPluginInfo() {
return {LLVM_PLUGIN_API_VERSION, "BronyaObfus", "v0.1", [](PassBuilder &PB) {
PB.registerPipelineParsingCallback(
[](StringRef PassName, FunctionPassManager &FPM, ...) {
if (PassName == "bogus-control-flow") {
FPM.addPass(BogusControlFlowPass());
return true;
}
if (PassName == "flattening") {
FPM.addPass(FlatteningPass());
return true;
}
if (PassName == "mba-obfuscation") {
FPM.addPass(MBAObfuscationPass());
return true;
}
return false;
});
PB.registerPipelineParsingCallback(
[](StringRef PassName, ModulePassManager &MPM, ...) {
if (PassName == "string-obfuscation") {
MPM.addPass(StringObfuscationPass());
return true;
}
return false;
});
PB.registerPipelineStartEPCallback([](ModulePassManager &MPM,
OptimizationLevel Level) {
MPM.addPass(StringObfuscationPass());
FunctionPassManager FPM;
FPM.addPass(BogusControlFlowPass());
FPM.addPass(FlatteningPass());
FPM.addPass(MBAObfuscationPass());
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
});
}};
}
extern "C" LLVM_ATTRIBUTE_WEAK ::llvm::PassPluginLibraryInfo
llvmGetPassPluginInfo() {
return getBronyaObfusPluginInfo();
}
型
如果我只想加载bogus-control-flow
pass,我应该如何向clang传递参数?
1条答案
按热度按时间pbossiut1#
我也试过这个,但似乎不可能。只能从插件向优化通道管道添加通道(基于
OptimizationLevel
-O0
,-O1
等)。在你的情况下,你有你所有的通行证,因为,这是所谓的:字符串
你能做的就是将你当前的插件重构成更小的插件。例如
bogus-control-flow.dll
只添加BogusControlFlowPass
通道:型
然后可以使用以下命令调用它:
.\bin\clang++.exe -O1 -Xclang -fpass-plugin='bogus-control-flow.dll' .\test.cpp -o .\a.exe
个假设您创建了插件:
foo.dll
、bar.dll
和tar.dll
如果您想启用从foo.dll
和bar.dll
的传递,您可以通过提供以下内容来实现:-Xclang -fpass-plugin=foo.dll -Xclang -fpass-plugin=bar.dll
个