- ARM匯編與逆向工程:藍狐卷·基礎知識
- (美)瑪麗亞·馬克斯特德
- 654字
- 2024-05-14 11:09:05
1.2 高級語言
那么,為什么匯編語言沒有成為編寫軟件的主流編程語言?一個主要原因是匯編語言不具有可移植性。想象一下,為了支持每種處理器架構,每次都必須重新編寫整個應用程序代碼庫!這是非常大的工作量。取而代之的是,新的語言已經發展了起來,能將這些特定于處理器的細節抽象出來,使同一個程序可以很容易地在不同的架構下被編譯。這些語言通常被稱為高級語言,與更貼近特定計算機硬件和架構的低級匯編語言形成對比。
這里的“高級語言”一詞本質上是相對的。C和C++剛開始被認為是高級語言,而匯編語言被認為是低級語言。由于出現了更新的、更抽象的語言,如Visual Basic和Python,C/C++如今經常被視為低級語言。歸根結底,這取決于你所站的角度和所問的對象。
與匯編語言一樣,處理器不能直接理解高級源代碼。程序員需要使用編譯器將編寫的高級程序轉換成機器碼。和以前一樣,我們需要指定二進制文件將在哪種架構上運行,并且使用交叉編譯器在非Arm系統上創建Arm架構的二進制文件。
編譯器的輸出是一個可在特定的操作系統上運行的可執行文件,而且通常輸出給用戶的是二進制可執行文件,而不是程序的源代碼。因此往往當我們想分析一個程序時,我們所擁有的只是編譯后的可執行文件。
不幸的是,對于逆向工程師來說,一般情況下,不可能逆轉編譯過程返回到原始源代碼。編譯器不僅是非常復雜的程序,在原始源代碼和生成的二進制文件之間有許多層的迭代和抽象,而且其中許多步驟丟棄了方便程序員推理程序的人類可讀信息。
在沒有要分析的軟件源代碼的情況下,根據要求的詳細程度,我們有兩種分析方式:反編譯或反匯編可執行文件。