《编译与反编译技术》——第一章 引论 1.1节编译器与解释器
本節(jié)書摘來自華章出版社《編譯與反編譯技術(shù)》一書中的第1章,第1.1節(jié),作者龐建民,陶紅偉,劉曉楠,岳峰。更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“華章計算機(jī)”公眾號查看。
人類之間的交流是通過語言進(jìn)行的,但語言不是唯一的,不同的語言之間需要翻譯,這就導(dǎo)致了翻譯行業(yè)的建立。人與計算機(jī)之間也是通過語言進(jìn)行交流的,但人類能理解的語言與機(jī)器能理解的語言是不同的,也需要翻譯,這就導(dǎo)致了系列編譯器的誕生。編譯技術(shù)所討論的問題,就是如何把符合人類思維方式的意愿(源程序)翻譯成計算機(jī)能夠理解和執(zhí)行的形式(目標(biāo)程序)。實現(xiàn)從源程序到目標(biāo)程序轉(zhuǎn)換的程序,稱為編譯程序或編譯器。反編譯技術(shù)所討論的問題,就是如何把計算機(jī)能夠理解和執(zhí)行的形式(目標(biāo)程序)翻譯成便于人類理解的形式(高級語言源程序或流程圖)。實現(xiàn)從目標(biāo)程序到便于人類理解的系列文檔的轉(zhuǎn)換,稱為反編譯程序或反編譯器。
編譯器這個術(shù)語是由Grace Murray Hopper在20世紀(jì)50年代初期提出的,現(xiàn)代意義上最早的編譯器是20世紀(jì)50年代后期的Fortran編譯器,該編譯器驗證了經(jīng)過編譯的高級語言的生命力,也為后續(xù)高級語言和編譯器的大量涌現(xiàn)奠定了基礎(chǔ)。
反編譯技術(shù)起源于20世紀(jì)60年代,比編譯技術(shù)晚10年左右,但反編譯技術(shù)的成熟度遠(yuǎn)不如編譯技術(shù)。在半個世紀(jì)的發(fā)展過程中,出現(xiàn)了不少實驗性的反編譯器,其中以Dcc、Boomerang和IDA Pro的反編譯插件Hex_rays最為著名。但這些反編譯器都有這樣或那樣的缺陷。例如,Dcc只能識別最簡單的數(shù)據(jù)類型;Boomerang無法識別復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如C++的類和多維數(shù)組;Hex_rays只能產(chǎn)生可讀性較低的C偽代碼,且同樣無法識別復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。因此,反編譯技術(shù)還有很廣闊的研究與發(fā)展空間。
本章僅對編譯器和編譯流程方面的知識進(jìn)行概要闡述,反編譯方面的概要介紹將在第10章給出。
1.1 編譯器與解釋器
計算機(jī)的硬件只能識別和理解由0、1字符串組成的機(jī)器指令序列,即目標(biāo)程序或機(jī)器指令程序。在計算機(jī)剛剛發(fā)明的時期,人們只能向計算機(jī)輸入機(jī)器指令程序來讓它進(jìn)行簡單的計算。由于機(jī)器指令程序不易被人類理解,用它編寫程序既困難又容易出錯,于是就引入了代替0、1字符串的由助記符號表示的指令,即匯編指令,匯編指令的集合稱為匯編語言,匯編指令序列稱為匯編語言程序。但匯編程序?qū)嶋H上與機(jī)器語言程序是一一對應(yīng)的,均要求程序員按照指令工作的方式來思考和解決問題,兩者之間并無本質(zhì)區(qū)別。因此,它們被稱為面向機(jī)器的語言或低級語言。
隨著計算機(jī)的發(fā)展和應(yīng)用需求的增長,程序員的需求也大幅增長,但能夠用機(jī)器語言或匯編語言編程的人員數(shù)量滿足不了這種需求,許多科技工作者也想自己動手編寫程序,因此,需要抽象度更高、功能更強(qiáng)的語言來作為程序設(shè)計語言,于是產(chǎn)生了面向各類應(yīng)用的便于人類理解與運(yùn)用的程序設(shè)計語言,即高級語言。盡管人類可以借助高級語言來編寫程序,但計算機(jī)硬件真正能夠識別和理解的語言還是由0、1組成的機(jī)器語言,這就需要在高級語言與機(jī)器語言之間建立橋梁,使得高級語言能夠過渡到機(jī)器語言。也就是說,需要若干“翻譯”,把各類高級語言翻譯成機(jī)器語言。語言通常被分成三個層次:高級語言、匯編語言、機(jī)器語言。高級語言可以翻譯成機(jī)器語言,也可以翻譯成匯編語言,這兩種翻譯都稱為編譯。匯編語言到機(jī)器語言的翻譯稱為匯編。編譯和匯編屬于正向工程,有時還需要將機(jī)器語言翻譯成匯編語言或高級語言,這通常稱為反匯編或反編譯,屬于逆向工程。
在編譯器工作方式下,源程序的翻譯和翻譯后程序的運(yùn)行是兩個相互獨立的階段。用戶輸入源程序,編譯器對該源程序進(jìn)行編譯,生成目標(biāo)程序,這個階段稱為編譯階段。目標(biāo)程序在適當(dāng)?shù)妮斎胂聢?zhí)行,最終得到運(yùn)行結(jié)果的過程稱為運(yùn)行階段。
解釋器是另一種形式的翻譯器。它把翻譯和運(yùn)行結(jié)合在一起進(jìn)行,邊翻譯源程序,邊執(zhí)行翻譯結(jié)果,這種工作方式被稱為解釋器工作方式。
換句話說,編譯器的工作相當(dāng)于翻譯一本原著,原著相當(dāng)于源程序,譯著相當(dāng)于目標(biāo)程序,計算機(jī)的運(yùn)行相當(dāng)于閱讀一本譯著,這時,原著和翻譯人員并不需要在場,譯著是主角。解釋器的工作相當(dāng)于現(xiàn)場翻譯,外賓和翻譯都要在場,翻譯邊聽外賓講話,邊翻譯給聽眾,翻譯是主角。解釋器與編譯器的主要區(qū)別是:運(yùn)行目標(biāo)程序時的控制權(quán)在解釋器而不是目標(biāo)程序。
總結(jié)
以上是生活随笔為你收集整理的《编译与反编译技术》——第一章 引论 1.1节编译器与解释器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《实施Cisco统一通信管理器(CIPT
- 下一篇: 《CCNP TSHOOT 300-135