2013-02-28 2 views
3

난 deobfuscate 할 C 코드 조각이 있습니다. 까다로운 매크로가 많이 들어 있습니다. 나는 C 전처리 및 들여 쓰기를 통해 코드를 실행하고 지금은이 유사하게 나타납니다전처리 단계에서 상수 폴딩

switch (9263 + 1505) { 
case 1505 + 41131 + 6729 + 2347: 
      ... 
case 1505 + 41131 + 6729 + 2347 + 1: 
      ... 
case 1505 + 41131 + 6729 + 2347 + 2: 
      ... 

내가 코드의 모든 정수를 접을 수있는 몇 가지 도구를 찾고 추가 분석을 단순화하기 위해. 나는 C 전 처리기가 이것을 할 수 없다는 것을 알고 있으며 컴파일 단계에서 상수 접이 최적화가 수행 될 것이다. 그러나 소스 코드는 어떻습니까?

쉘 스크립트는이 작업을 수행하는 유일한 방법 일 수 있다고 생각합니다.

답변

4

clang을 사용하여 컴파일하고 c 백엔드를 사용하여 c 코드를 생성합니다. 이 같은

뭔가 일을 안 : 내가 볼 수 있듯이

clang -emit-llvm source.cpp -o - | llc -march=c 
+0

, C LLVM에 대한 백엔드는 더 이상 지원한다. 대신 C++을 사용하려고 시도했지만 그 결과는 초기 소스와 매우 다릅니다. –

+0

git에서 오래된 clang을 가져 와서 직접 컴파일 할 수 있습니까? C 백엔드가이를 수행하는 가장 좋은 방법 인 것 같습니다. 2009 년 12 월경부터 버전을 시험해보십시오. 그렇지 않으면 스위치 케이스 문 (669 번 줄)을 직접 해킹해야합니다. http://clang.llvm.org/doxygen/Stmt_8h_source.html –

+0

제가 해냈습니다. 음, 최종 코드는 읽기 쉽지 않지만 멀리는 더 이상 복잡하지 않습니다. 그래서 gdb 덕분에 나는 그것을 deobfuscate 할 수있었습니다. 감사. –