2009-04-07 32 views
15

Mã C bị xáo trộn sau in các từ vào "12 ngày của Xmas".Ba đối số đối với chính, và các thủ thuật gây xáo trộn khác

Tôi đang cố gắng giải thích cách hoạt động của nó. Tôi về cơ bản hoàn toàn bị mất. Ý nghĩa của ba đối số không được phân tách là chính trong cuộc gọi ban đầu, chuỗi ký tự sau lần trả về đầu tiên, đối số số âm cho các cuộc gọi đến chính là gì? Eek!

Tôi chủ yếu làm suy nghĩ này có lẽ tôi sẽ tìm hiểu một số góc thú vị của ngôn ngữ C, vì vậy câu trả lời trong mạch đó được chào đón nhiều nhất.

#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

Đây có phải là từ IOCCC không? – Zifre

+0

Không thể nhớ nơi tôi tìm thấy nó. Lấy làm tiếc. – Leonard

+1

Vâng, đó là từ ioccc: http://www.ioccc.org/1988/phillipps.c –

Trả lời

12

Một người nào đó đã đi và đảo ngược điều này: http://research.microsoft.com/en-us/um/people/tball/papers/xmasgift/. Chỉ cần đọc qua đó. Nó sẽ giải thích nó hoạt động như thế nào.

+0

Một vài ký tự từ dòng mở đó, tìm kiếm trên web, Wikipedia và tôi đã kết thúc ở cùng một bài viết. +1 – gbarry

+0

@gbarry: Cách tiếp cận tương tự đã dẫn tôi đến http://udel.edu/~mm/xmas/ –

1

Một số hệ thống Unix không chỉ chuyển số đối số và đối số vào chính mà còn là vectơ vào môi trường (xem http://en.wikipedia.org/wiki/Main_function_(programming)). Tôi khá chắc chắn đó là những gì ví dụ obfuscated này đã mong đợi.

Tôi không nghĩ rằng bạn có thể học được nhiều từ mã khó hiểu như vậy. Nó có lẽ là một thí sinh đến số obfuscated c contest.

Các vấn đề liên quan