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

时间:2017-02-01 00:25:35

标签: c linker clang libtool

我用o-llvm混淆了很多GitHub项目。它是在clang中实现的编译时链接器。使用o-llvm,我正在尝试编译/混淆使用libtool的GitHub项目,但指定混淆变换所需的标志会使链接器陷入混乱。

我传递的额外标志就像:

/path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann

-bcf表示应用虚假控制流转换,-boguscf-loop限制每个基本块运行的次数,-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中指定CFLAGS:

./configure CC="/path/to/obfuscator/clang -O0 -mllvm -bcf -mllvm -boguscf-loop=1 -mllvm -ann"

这使得“链接器”成为clang,它识别“-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只使用混淆参数进行编译而不是链接吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我试图避免这种情况,但我最终修改了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,这只是一个铿锵的事情。现在,我可以使用不同的编译器作为vlc语料库的一部分,使用任意调用自动编译Chimera

相关问题