確定進行反彙編**區域,這並不像那麼簡單。通常,指令與資料混雜在一起,區分它們就顯得非常重要。反彙編可執行檔案:該檔案必須符合可執行檔案的某種通用格式,如windows所使用的可移植可執行(portable executable, pe)格式或許多unix系統常用的可執行和鏈結格式(elf)。
知道指令的起始位址後,下一步就是讀該位址(或檔案偏移量)所包含的值,並執行一次表查詢,將二進位制操作碼的值與它的組合語言助記符對應起來。根據被反彙編的指令集的複雜程度,這個過程可能非常簡單,也可能需要幾個額外的操作,如查明任何可以修改指令行為的字首以及確定指令所需的運算元。對於指令長度可變的指令集,如intel x86,要完全反彙編一條指令,可能需要檢索額外的指令位元組。
獲取指令並解碼任何所需的運算元後,需要對它的組合語言等價形式進行格式化,並將其在反彙編**中輸出。有多種組合語言輸出格式可供選擇。如x86所使用的兩種主要格式為intel格式和at&t格式。
輸出一條指令後,繼續反彙編下一條指令,並重複上述過程,直到反彙編檔案中的所有指令。
有大量的演算法可用於確定從何處開始反彙編,如何選擇下一條反彙編的指令,如何區分**與資料,以及如何確定何時完成對最後一條指令的反彙編。線性掃瞄和遞迴下降是兩種最主要的反彙編演算法。
反彙編 迴圈
includeint main 00401010 55 push ebp 00401011 8bec mov ebp,esp 00401013 83ec 44 sub esp,44 00401016 53 push ebx 00401017 56 push esi 00401018 57 push ...
反彙編簡介
在傳統的軟體開發模型中,程式設計師使用編譯器 彙編器 鏈結器中的乙個或者幾個建立可執行程式,為了回溯程式設計過程,可以使用各種工具來撤銷彙編和編譯過程,這些工具就叫做反彙編器和反編譯器。反彙編器 以機器語言作為輸入,得到組合語言形式的輸出結果 反編譯器 以機器語言作為輸入,得到高階語言形式的輸出結果...
反彙編快速入門
我從事組合語言研究大概幾年前,因為是我為了開發sepl計算機語言編譯器。雖然到現在還沒有開發出 來,但是已經看到曙光了。為了研究彙編,我從反彙編入手,做了破解,脫殼,除錯等。但是彙編對我來說一直是讀天書,沒有任何突破。直到最近幾天我有了重大發現。有人說做黑客從反彙編sqlserver.exe檔案開始...