2009-04-07 3 views
15

다음과 같은 난독 화 된 C 코드는 "12 일 간의 Xmas"에 단어를 인쇄합니다.메인에 대한 세 가지 인수 및 기타 난독 처리 트릭

나는 그것이 어떻게 작동하는지 알아 내려고 노력했습니다. 나는 기본적으로 완전히 잃어 버렸습니다. 첫 번째 호출에서 main에 대한 세 개의 형식화되지 않은 인수의 중요성은 무엇입니까? 첫 번째 반환 이후의 문자 시리즈, main에 대한 호출의 음수 인수? 에크!

저는 C 언어의 흥미로운 부분을 배울 것입니다. 아마도이 정맥의 응답이 가장 환영받을 것입니다.

#include <stdio.h> 
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_, 
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13? 
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t, 
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#\ 
;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \ 
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \ 
){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \ 
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \ 
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \ 
}'+}##(!!/") 
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1) 
    :0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a, 
"!ek;dc [email protected]'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);} 
+0

IOCCC의이 제품입니까? – Zifre

+0

찾은 위치를 기억할 수 없습니다. 죄송합니다. – Leonard

+1

네, ioccc 출신입니다 : http://www.ioccc.org/1988/phillipps.c –

답변

12

누군가가 이미이 코드를 역으로 바꿨습니다 : http://research.microsoft.com/en-us/um/people/tball/papers/xmasgift/. 그냥 읽어보십시오. 어떻게 작동하는지 설명하겠습니다.

+0

오프닝 라인의 문자, 웹 검색, 위키 백과, 그리고 같은 기사에서 끝났습니다. +1 – gbarry

+0

@gbarry : 동일한 접근 방식으로 인해 http://udel.edu/~mm/xmas/가되었습니다. –

1

일부 유닉스 시스템은 인수의 수와 주에 대한 인수뿐만 아니라 환경에 벡터 (http://en.wikipedia.org/wiki/Main_function_(programming) 참조) 전달하지 않습니다. 나는이 모호한 예제가 기대했던 것임을 확신한다.

나는 그런 난독 화 된 코드에서 많은 것을 배울 수 있다고 생각하지 않습니다. 아마 obfuscated c contest의 참가자 일 것입니다.

관련 문제