反組譯器
維基百科,自由的 encyclopedia
反組譯器(disassembler)是一種將機器語言轉換為組合語言的電腦程式——這與組譯器的目的相反。反組譯器與反編譯器不同,反編譯器的目標是高階語言而非組合語言。反組譯器的反組譯輸出通常格式化為適合人類閱讀,而非用作組譯器的輸入源,因此它主要是一個逆向工程工具。
此條目翻譯自其他語言維基百科,需要相關領域的編者協助校對翻譯。 |
組合語言原始碼通常允許使用常數和程式設計師注釋,而這些通常會在組譯器組譯的機器語言中被移除。因此,以機器碼為基礎完成的反組譯結果將沒有這些常數和注釋,閱讀輸出結果將比閱讀原始碼更有難度。一些反組譯器提供了內建的代碼注釋功能,其生成的輸出增補了有關被呼叫API函式或被呼叫函式參數的注釋。一些反組譯器會利用對象檔案(例如ELF)中存在的符號除錯(英語:Symbolic debugging)資訊。例如,IDA允許人類使用者在互動式對談中為代碼的值或區域標記輔助記憶碼號。
反組譯不是一門精準科學:在有可變寬度指令的複雜指令集(CISC)平台上,使用操作碼(英語:Opcode)級編程或存在程式自修改代碼時,單個程式可能有兩個或多個合理的反組譯結果。程式在執行期間決定實際執行哪個指令被歸約到停機問題,這是已知無法解決的問題。