बाईटकोड बैकएंड tchrist पहले से ही शामिल है और केवल C
बैकएंड बारे में बात कर बाहर छोड़कर, सभी perlcc
है एक सी कार्यक्रम है, जो यह तो संकलित में अपने संकलित पर्ल कार्यक्रम के optree अनुवाद किया गया है। वह सी प्रोग्राम चलाएगा, फिर उस ऑप्ट्री को स्मृति में पुनर्निर्मित करेगा, और मूल रूप से इसे निष्पादित करेगा जैसे कि आमतौर पर पर्ल। इसका मुद्दा वास्तव में नियमित पर्ल कोड के संकलन समय को गति देने के लिए है।
आपके प्रोग्राम का यह विकल्प PL_main_root
वैश्विक चर में उपलब्ध है। हमारे पास पहले से ही B::Deparse
नामक एक मॉड्यूल है, जो ऑप्ट्रीज़ का उपभोग करने में सक्षम है और उन्हें स्रोत कोड में बदल देता है जो कि ऑप्ट्री से संकलित मूल कोड के बराबर है। ऐसा लगता है कि compile
विधि है जो कोडफ्रफ़ देता है जो निष्पादित होने पर, PL_main_root
के उपरोक्त परिणाम मुद्रित करता है।
इसके अलावा सी फ़ंक्शन Perl_eval_pv
है, जिसका उपयोग आप सी स्पेस से पर्ल स्निपेट का मूल्यांकन करने के लिए कर सकते हैं।
$ echo 'print 42, "\\n"' > foo.pl
$ perl foo.pl
42
$ perlcc foo.pl
$ ./a.out
42
$ gdb a.out
...
(gdb) b perl_run
Breakpoint 1 at 0x4570e5: file perl.c, line 2213.
(gdb) r
...
Breakpoint 1, perl_run (my_perl=0xa11010) at perl.c:2213
(gdb) p Perl_eval_pv (my_perl, "use B::Deparse; B::Deparse->compile->()", 1)
print 42, "\n";
$1 = (SV *) 0xe47b10
बेशक
सामान्य बी :: Deparse चेतावनियां लागू होते हैं, लेकिन यह निश्चित रूप से रिवर्स इंजीनियरिंग के लिए आसान हो जाएगा। असल में मूल स्रोत कोड का पुनर्निर्माण अधिकांश मामलों में संभव नहीं होगा, भले ही यह उपर्युक्त उदाहरण के लिए काम करता हो।
बीडी प्राप्त करने के लिए आपको सटीक जीडीबी जादू करना होगा :: आपको कुछ समझदार देने के लिए अव्यवस्था भी आपके पर्ल पर निर्भर करती है। मैं इथ्रेड के साथ एक पर्ल का उपयोग कर रहा हूं, और इसलिए बहुतायत। यही कारण है कि मैं my_perl
चर के आसपास गुजर रहा हूँ। अन्य perls की आवश्यकता नहीं हो सकती है।इसके अलावा, अगर किसी ने perlcc द्वारा संकलित बाइनरी को तोड़ दिया, तो चीजें थोड़ा कठिन हो जाएंगी, लेकिन वही तकनीक अभी भी काम करेगी।
इसके अलावा आप किसी भी विकल्प को संकलित करने के लिए इसका उपयोग कर सकते हैं जिसे आप प्रोग्राम निष्पादन के दौरान किसी भी समय रोक सकते हैं। बी :: डिपर्स के संकलन उप पर एक नज़र डालें और के बजाय जो भी विकल्प आप डंप किया गया है, उसे B
ऑब्जेक्ट के साथ प्रदान करने के अलावा कुछ ऐसा ही करें।
वही बात perlcc के उल्लिखित बाइटकोड बैकएंड पर लागू होती है। मैं CC
नामक अनुकूलित सी बैकएंड के बारे में पूरी तरह से निश्चित नहीं हूं।
संदर्भ उद्देश्यों के लिए, हाँ, शब्द "रिवर्स इंजीनियर" है; आप कम-अमूर्त प्रतिनिधित्व (संकलित/मशीन कोड) से उच्च-पृथक्करण प्रतिनिधित्व (संरचित स्रोत कोड) पर जा रहे हैं। –