匯編和反編譯
① 反編譯或匯編是什麼回事
匯編是一種編程語言
反匯編是逆向工程
② 反編譯和反匯編有什麼區別
反匯編是把機器碼翻譯成的匯編;
反編譯是把機器碼翻譯成高級語言的過程,但通常要有其他線索輔助才能完成。
③ 什麼是匯編與反匯編,具體用途在於什麼
在計算機專業里「匯編」有作為名詞用的和作為動詞用的兩種意思。做名詞時,是「匯編語言」的簡稱,它是一種把CPU可執行的指令用符號化表示出來的一種語言,是繼「機器語言」後的第二代語言(現在常用的C、Basic、Java等屬於第三代語言)。作為動詞用的時候是指把第三代語言程序轉變為匯編語言程序的過程。懂匯編語言的人可以通過修改高級語言匯編出來的程序修改,使它具有更高的運行效率。
「反匯編」是指把可執行程序(如*.exe或*.DLL)轉化為匯編語言程序的過程。通過反匯編可以把你沒有源代碼的可執行程序變成可以閱讀的匯編語言程序,你可以從中修改(如:破解密碼)或找出它的運做過程(如:找出病毒的感染過程、藏身位置、發作條件等,用手工去除殺毒軟體對付不了的病毒)。不過要小心的是不要因為破解人家的軟體觸犯了法律!
④ 匯編與反匯編
可以的,但是反編譯的效果最常見的就是反編譯成匯編語言,但是說你寫一個C的程序已經編譯程.exe文件了,然後又想用工具對.exe文件進行反編譯,那麼就只能反編譯到匯編語言的狀態,不可能反編譯到C的狀態,雖然現在網上有些人能反匯編成C,但是效果也不好,有很多的錯誤。
編譯的過程是不可逆的,就好像你把豬殺了做成香腸,然後你又想把想把香腸變成豬一樣。最多能把香腸又變成肉末,變成豬你聽過嗎?道理就這樣
⑤ 反編譯exe文件就是把exe還原為匯編
首先了解一下概念,exe程序只是WIN下PE格式的可執行文件的一種,而所謂的計算機執行的代碼只是一串
二進制數
,跟數據沒區別,當CS,EIP指向哪,哪裡就是程序,而匯編語言之所以叫最底層的語言,是因為,
匯編的每一個語法,都應對了一串二進制的指令,這也就是
反匯編
的原理,所以
NO1.一、
反編譯
exe程序
就是
把
exe
還原為匯編語言嗎?,這句話,不能叫還原,應該叫解釋,「解釋」的東西,沒還原的那麼逼真,比如,在匯編
源程序
中所有的標號和注釋,進行編譯後,變成二進制可執行文件後,在反匯編,標號就變成數字了,而注釋更是沒了.....
二、除了
還原為
匯編語言,還能
反編譯為
其他
高級語言
嗎?不能,高級語言的語法是建立在大量的計算機
二進制代碼
之上的,比如你c語言隨便調用一個子函數,到了二進制中,他是先壓棧,參數(編譯後參數從右往左壓,每個語言還不一樣),然後就是call
子函數,子函數運行後,他還要清理堆棧,所以你一個句簡單的高級語言,其實蘊含了大量的代碼,而高級語言編譯後的程序,就脫離了他的開發環境,樓上說的會引起你誤會,Java的中間碼,可以用他自帶的反編譯工具,因為Java不是
編譯器
,而是
解釋器
,所以他不編譯,只是解釋他的中間碼
NO2.所有的exe都可以反匯編,但是你要注意,不只exe這種pe格式,linux下可執行文件是elf,所以你在反匯編的時候,要注意可執行文件的文件的頭,而早期的DOS只是純二進制代碼,沒有
頭文件
,這個很重要,你要反匯編什麼格式,就要選擇相應的工具
NO3
.exe反匯編,當然是OD,不過,我對OD不熟悉,好像他只支持WIN下的反匯編
⑥ 反匯編和反編譯的區別
反匯編得到的是匯編代碼
反編譯得到的是所用語言的源代碼
比如,一個c語言寫的程序
反匯編得到匯編代碼
反編譯得到c語言的源代碼