linux匯編反編譯
A. 反編譯器 反編譯出來的匯編代碼 和 原來的匯編代碼有什麼區別嗎
反編譯器,反編譯器出來的匯編代碼和原來的匯編電腦有什麼區別,其實也是沒有什麼太大的區別的說的。
B. linux查看c++程序某個函數的反匯編會顯示函數名嗎
這個問題很復雜。這得看你的二進製程序是否包含這些信息。這得看 編譯選項 有沒有包含 -s 。-s選項會剔除不需要的符號名。
正式二進制發布的軟體是可以沒有這些信息的。對於靜態鏈接後 函數名在c/c++ 語言執行的過程中是不需要的,它是通過內存地址 去訪問 內存,數據和代碼。函數名用於 編譯過程 和鏈接過程。對於動太鏈接在程序執行過程由ld.so 通過變數名去 動態的鏈接到某些庫的指定函數。動態鏈接的符號名不可剔除。
說到底就是二進製程序如果包含變數名,就會顯示。
實例
main.c:
intaaa=10;
intmyfunc(){
return5;
}
intmain(){
intbbb=20;
aaa=20;
bbb=myfunc();
return0;
}
gcc-nostdlibmain.c-omain_with_symbols
gcc-nostdlibmain.c-omain_without_symbols
分別產生包含符號名 和不包含符號名的 可執行文件。
!122~/src/c_cpp%objmp-dmain_with_symbols|grepmyfunc
000000000040017c<myfunc>:
4001a5:e8d2ffffffcallq40017c<myfunc>
!123~/src/c_cpp%objmp-dmain_without_symbols|grepmyfunc
!124~/src/c_cpp1%
很明顯使用 -s 選項後 很多符號信息丟失,反匯編中也不包含相關符號名。
C. linux 64位 程序錯誤 如何反匯編找到general protection ip:7fcc6eece1a9
OllyDebug
D. 如何在linux下把.so文件反匯編
和反匯編其他程序一樣,用 objmp 或其他你喜歡的反匯編工具都可以的
E. linux驅動反編譯
反編譯一般也只能看到匯編級別的源代碼,很難看到C級別的,由於沒有符號表的緣故。
F. linux 下如何將動態鏈接庫.so進行反編譯後,換編譯器重新編譯
程序能不能正常運行取決於程序和動態庫之間的ABI是否兼容。只要ABI兼容那麼編譯器版本就沒有影響。高版本的編譯器同樣可以使用低版本的ABI來生成目標代碼,但這個問題要具體分析。你解決問題的思路完全不對。
G. 如何看linux編譯後的文件
有,反編譯為匯編,不過因為 Linux 大部分為開源軟體,不如找源代碼……
所以,我沒注意過怎麼反匯編。一般經常調試程序的人都會這個。
另外,好像 gcc 編譯時可以生成過渡代碼,現在也有看過度代碼的,好像和匯編類似。
H. 怎樣反編譯程序
高級語言源程序經過 編譯 變成可執行文件,反編譯就是逆過程。
但是通常不能把可執行文件變成高級語言源代碼,只能轉換成匯編程序。
計算機軟體反向工程(Reversepengineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
反編譯是一個復雜的過程,所以越是高級語言,就越難於反編譯,但目前還是有許許多多的反編譯軟體: VB: VBExplorer 、VB反編譯精靈和VBRezQ;只能反編譯界面圖像,好像代碼不能完全反編譯 java: JAD ;java的反編譯比較常見,所以反編譯比較完全, 將class文件反編譯成java文件也是有可能的 C++ : eXeScope Dephi: DEDE c#:Reflector 易語言:E-Code Explorer.exe(易格式可執行文件分析器)。
I. 反編譯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下的反匯編
J. 怎樣反編譯程序
哦 很簡單
如果沒有加殼 可以用 rescope注冊版
加殼的 涉及加密解密知識