დეკოპილერის დიზაინი – შესავალი

Original web-page: http://www.backerstreet.com/decompiler/introduction.htm

შესავალი

დეკომპილირება არის კომპიუტერული პროგრამების საპირისპირო საინჟინრო ფორმა. მისი მიზანია შედგენილი ორობითი ფაილი კონვერტირებად წყაროს. ამის გაკეთება შეიძლება რამდენიმე მიზეზით, მაგალითად, თუ როგორ მუშაობს პროგრამა, ან ცდილობს შეცვალოს პროგრამა, გაზარდოს ან შეცვალოს შეცდომა.

დეკომპილილაცია უკვე მრავალი წლის მანძილზეა, ალბათ, მას შემდეგ, რაც ადამიანებმა დაიწყეს მაღალი დონის ენების პროგრამების შედგენა ქვედა დონის ფორმატებში, როგორიცაა შეკრებისა და მანქანების კოდი.

რამდენიმე მცდელობა ჩატარდა ორობითი შესრულებადი დეკორპილერები. ეს გვერდი აქვს მაგალითები.

არსებობს კიდევ უფრო დეკომპიუტერები ხელმისაწვდომია მოახერხა გარემოში, რომ გამოიყენოთ ბაიტი-კოდი, ისევე როგორც Java და C#. ვრცელი სია ხელმისაწვდომია პროგრამის ტრანსფორმაციის wiki.

ამ გვერდებზე ჩვენ გავამახვილებთ ოდნავ შესრულებაზე დეკომპილაციაზე, ან მანქანების კოდიდან კოდისთვის, რადგან ეს ბევრად უფრო რთულია, ვიდრე ჯეკ ბიტიანი კოდი ან C#.

რამდენიმე ენასა და კომპილერს შეუძლია მანქანა კოდი, მათ შორის რამდენიმე Java, C# და Visual Basic კომპილერები. ამიტომ დეკომპილერმა უნდა იცოდეს, რომელი ენა იყო გამოყენებული პროგრამაში შედგენისთვის და უნდა მიეღო მხარდაჭერა ამ ენაზე. თუმცა, რთული პრობლემების დეკომპილაციის უმრავლესობა გამოდის ნაკლებად შეზღუდულ ენებზე, კერძოდ, C, Pascal ან C++.

ალგორითმების უმრავლესობა შეიძლება გამოყენებულ იქნეს ყველა ენაზე, ამიტომ ჩვენ ძირითადად გამოვიყენებთ მაგალითებს C. როდესაც ჩვენ ალგორითმს ვაჩვენებთ, ჩვენ ვიყენებთ C ან C++, რადგან ეს არის Linux-ისა და Windows-ის ყველაზე ხელმისაწვდომი ენა.

მიუხედავად სამიზნე ენისა, დეკოპირერი ძირითადად ეხება 3 სახის ერთეულს:

  • კოდექსის ობიექტები (ფუნქციები, განცხადებები)
  • მონაცემთა ობიექტები (გლობალური და ადგილობრივი ცვლადები)
  • ტიპები (ცვლადი ტიპები, ფუნქციის პროტოტიპები)

დისკოპილერის მუდმივი პრობლემა ის არის, რომ შევაფასოთ ერთი ან მეტი სამი პირიდან, რომელიც იძლევა ორობითი ფაილში ნაპოვნი ბაიტების თანმიმდევრობას. იმისათვის, რომ ამის გაკეთება, ეს სასარგებლოა, თუ როგორ განვითარებადი ინსტრუმენტები (რომელიც ჩვენ მოვუწოდებთ “ველით საინჟინრო” ინსტრუმენტები) გამოიყენება, როდესაც წერილობით პროგრამა, რადგან ეს პროცესი ჩვენ ცდილობს შეცვალოს.