Libtool/clang:让我将参数传递给编译器,而不是链接器

Libtool/clang:让我将参数传递给编译器,而不是链接器,c,linker,clang,libtool,C,Linker,Clang,Libtool,我把很多GitHub项目都混为一谈了。它是用clang实现的编译时链接器。使用o-llvm,我试图编译/混淆使用libtool的GitHub项目,但是指定混淆转换所需的标志会弄乱链接器 我要传递的额外标志如下: /path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann -bcf表示应用伪控制流转换,-boguscf循环限制每个基本块的运行次数,-ann表示使用printf语句注释基本块 首先,我尝试

我把很多GitHub项目都混为一谈了。它是用clang实现的编译时链接器。使用o-llvm,我试图编译/混淆使用libtool的GitHub项目,但是指定混淆转换所需的标志会弄乱链接器

我要传递的额外标志如下:

/path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann
-bcf表示应用伪控制流转换,-boguscf循环限制每个基本块的运行次数,-ann表示使用printf语句注释基本块

首先,我尝试在配置后的make步骤中执行此操作:

make CC=/path/to/obfuscator/clang CFLAGS="-O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann
但是gcc是链接器,它失败了,因为它不知道“-mllvm”选项。Libtool还自动删除了“-bcf”“-boguscf loop=1”和“-ann”选项

在另一个项目中,返回到配置和指定CC中的CFLAG有效:

./configure CC="/path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann"
这使得“linker”变得叮当作响,它可以识别“-mllvm”选项,但是libtool删除相应的标志仍然会扰乱调用:

[...] -O0 -mllvm -mllvm -mllvm -Wl,-z -Wl,defs   -Wl,-soname [...]
clang: warning: argument unused during compilation: '-mllvm -bcf'
clang: warning: argument unused during compilation: '-mllvm -boguscf-loop=1'
clang: warning: argument unused during compilation: '-mllvm -ann'
clang: warning: argument unused during compilation: '-mllvm -mllvm'
clang: warning: argument unused during compilation: '-mllvm -Wl,-z'
/usr/bin/ld: error: cannot open defs: No such file or directory
我试着用-Wc、flag或-Xcompile来预写我的编译器专用参数,但clang无法识别这两个参数

是否有其他方法可以告诉Libtool或Clang只使用模糊参数进行编译而不使用链接


谢谢。

我试图避免这种情况,但我最终修改了libtool脚本以删除-mllvm,就像链接过程中的其他混淆选项一样

sed -i "s/-m\*|/-mtune=*|-march=*|-mcpu=*|-mfpmath=*|-masm=*|-mieee-fp|-mno-ieee-fp|-msoft-float|-mno-fp-ret-in-387|-mno-fancy-math-387|-malign-double|-mno-align-double|-m96bit-long-double|-m128bit-long-double|-mlarge-data-threshold=*|-mrtd|-mregparm=*|-msseregparm|-mpc32|-mpc64|-mpc80|-mstackrealign|-mpreferred-stack-boundary=*|-mincoming-stack-boundary=*|-mmmx|-mno-mmx|-msse|-mno-sse|-msse2|-mno-sse2|-msse3|-mno-sse3|-mssse3|-mno-ssse3|-msse4.1|-mno-sse4.1|-msse4.2|-mno-sse4.2|-msse4|-mno-sse4|-mavx|-mno-avx|-maes|-mno-aes|-mpclmul|-mno-pclmul|-msse4a|-mno-sse4a|-mfma4|-mno-fma4|-mxop|-mno-xop|-mlwp|-mno-lwp|-m3dnow|-mno-3dnow|-mpopcnt|-mno-popcnt|-mabm|-mno-abm|-mfused-madd|-mno-fused-madd|-mcld|-mcx16|-msahf|-mmovbe|-mcrc32|-mrecip|-mveclibabi=*|-mabi=*|-mpush-args|-mno-push-args|-maccumulate-outgoing-args|-mthreads|-mno-align-stringops|-minline-all-stringops|-minline-stringops-dynamically|-mstringop-strategy=*|-momit-leaf-frame-pointer|-mtls-direct-seg-refs|-mno-tls-direct-seg-refs|-msse2avx|-mno-sse2avx|-m32|-m64|-mno-red-zone|-mcmodel=*|-mcmodel=*|-mcmodel=*|-mcmodel=*|/g" libtool
基本上,使用gcc手册中所有可能的值扩展-m*,减去-mllvm,这只是一个叮当作响的东西。现在,作为语料库的一部分,我可以使用不同的编译器自动编译任意调用