2017-02-01 8 views
0

많은 GitHub 프로젝트를 o-llvm으로 난처하게 만듭니다. 그것은 clang에서 구현 된 컴파일 타임 링커입니다. o-llvm에서는 libtool을 사용하는 GitHub 프로젝트를 컴파일/난독 화하려고 시도하지만 난독 화 변환을 지정하는 데 필요한 플래그가 링커를 엉망으로 만듭니다. 내가 전달하고있어Libtool/clang : 링커가 아닌 컴파일러에 인수를 전달합시다

여분의 플래그 등이있다 :

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

-bcf 수단이 기본 블록마다 실행 -ann가 표시 횟수 가짜 제어 흐름 변환, -boguscf 루프 제한을 적용 printf 문으로 기본 블록에 주석을 답니다.

은 첫째, 나는 구성한 후 메이크업 단계에서이 일을 시도 :

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

그러나 GCC는 링커이고는 "-mllvm"옵션을 몰랐다 때문에 실패했습니다. Libtool의도 자동으로 구성 할 다시 삭제하고 CC에서 CFLAGS를 지정, 다른 프로젝트에서 "-bcf" "-boguscf 루프 = 1"과 "-ann"옵션

을 제거했다 :

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

이를 은 "-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와 인수, 플래그를 붙이는 시도를 또는 -Xcompile bu clang은 그 중 어느 것도 인식하지 못합니다.

Libtool 또는 Clang에게 컴파일을위한 난독 화 인수 만 사용하고 연결하지 않도록 지시하는 다른 방법이 있습니까?

감사합니다.

답변

0

나는 이것을 피하려고했지만 링크하는 동안 다른 난독 화 옵션처럼 -mllvm을 삭제하도록 libtool 스크립트를 수정했습니다.

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의 설명서에서 값을 뺀 -mllvm와 * -m 확장합니다. 이제 다른 컴파일러를 Chimera 코퍼스의 일부로 사용하여 임의 호출을 사용하여 vlc을 자동으로 컴파일 할 수 있습니다.