導航:首頁 > 源碼編譯 > 十六進制文件反編譯成c語言

十六進制文件反編譯成c語言

發布時間:2024-11-23 16:24:40

❶ 機器語言(二進制或十六進制)是如何轉成匯編語言(英語)的 能不能轉成中文 為什麼

1.
你需要明白,微處理器的所有執行功能都是固定的,並且它們是有固定順序的,比方說在51指令集里功能的順序是:
00——Nop(空操作)
01——AJmp(絕對跳)
02——LJmp(長跳)
03——RR(邏輯右移)
04——Inc(遞加)
……
也就是說,51單片機里共N種功能,第X種功能是***。
而在80x86匯編里,更加復雜的匯編指令其實也都是按順序組織好的「數字」,比如ADD指令,按照其操作碼的不同(比方說目標操作符是Ax還是Bx),從B8開始有數個標號都屬於Add指令。

匯編時,我們寫的代碼都是助記符也就是諸如Add,Mov這樣的指令,而編譯時,就會把這些指令換成對應的數字了。這種轉換是固定的,也就是說Mov永遠只會轉換成那幾種形式(之所以會有好幾種是因為操作數的類型不同)。

2.
機器語言其實就是上面提到的「數字標號」,也就是指功能序號。比方說一條機器語言是00,按照上面的表找出來,就是Nop空操作指令,當單片機從ROM中執行到00這條代碼的時候就會自動調用「第00號功能」,而這個功能就是空操作。所有同型號的51單片機都是這么處理的。

3.
上面從字面上解決了你這個問題。但是我看了你的追問,似乎你想知道的不是這個,而是數字怎麼變成字?好吧……

首先你要知道ASCII碼,也就是數字和英文字母及標點符號之間的關系。舉個例子,65這個數字,在ASCII碼中可以表示大寫字母A,依次的,66可以表示B;32表示空格,13表示回車,等等。ASCII碼佔一個位元組。

漢字,比較特殊的一類字元,關鍵就在於它的復雜。英文字母加上標點符號和一堆稀奇古怪的符號,撐死了用127個ASCII碼表示就完事了,但是常用漢字遠不止它的十倍。所以漢字在數字邏輯中的處理,是按另一種編碼存在的。一般的ANSI格式文件是將漢字表示為GB-2312編碼,這種編碼跟ASCII碼不沖突,占兩個位元組。關於GB-2312編碼的具體情況可以網路查詢,規則比較復雜,沒辦法簡單講清楚的。注意這里講的是字元的表示規范。

至於指令能不能用漢字來表示,就是相當於 加 A,#30 這樣的指令能否存在,我想說的是,完全可以實現;但是這種匯編指令跟 ADD A,#30 有什麼區別?我們只需要把現有的匯編編譯器稍做修改,讓它可以識別這樣的指令,然後將「加」換成ADD,再把它轉換成數字,在實現上和用Add根本沒有區別。

現在的「易語言」,差不多也是用的這種原理,只是寫出了可以識別漢字指令的編譯器,然後還是使用的形如Delphi和VB一樣的編程風格。說白了就是將國外的產品進行一個「山寨」。如果你還不懂,說明我上面講的你沒懂。。。那我也沒辦法。

4.
其實在微處理器,或者CPU運行期間,內存中只有數字,也就是二進制碼,上面所有提到的,包括指令和字元,都是數字形式存在。而我們通常操作時看到的字元,都是用另外的方式(如顯卡)轉換成圖形放到顯示器上的,並不是處理器自帶的功能;單片機要顯示圖形字元,需要另外編程。

而對於輸入,其實也是將輸入的字元轉換成數字才能存儲到內存之中。

❷ 用於單片機燒寫的文件-----.hex文件,如何將.hex文件轉換為容易解讀的語言---C語言。詳細步驟!

用51反匯編工具 V1.0 智能版(這個可以反匯編的)
Hex-Rays插件 v1.0.071108。。。(這個可以反C語言的,貌似是最好的了)
但是反出來的效果不太好。。
因為官方的要付費,所以沒用過,不能給你提供詳細步驟了,不好意思
自己去搜索下,研究下吧 呵呵

閱讀全文

與十六進制文件反編譯成c語言相關的資料

熱點內容
setfacl命令 瀏覽:172
linux子系統中斷 瀏覽:342
linux查看進程ps 瀏覽:224
知識庫系統php 瀏覽:623
小波變換壓縮圖像python 瀏覽:151
阿里巴巴程序員怎麼月入百萬 瀏覽:173
如何使用國外伺服器 瀏覽:188
燃燈者pdf 瀏覽:468
編譯器用數學嗎 瀏覽:7
圖形化apk反編譯工具 瀏覽:48
考勤表加密怎麼辦 瀏覽:735
arj壓縮與解壓批處理怎麼寫 瀏覽:658
php和大數據哪個好 瀏覽:930
未來最值得投資的加密貨幣 瀏覽:526
ascii碼是編譯的時候用嗎 瀏覽:781
壓縮機感應包可以通用嗎 瀏覽:412
方舟伺服器怎麼發布到搜索列表 瀏覽:270
xml防反編譯 瀏覽:241
數據傳輸加密系統技術方案 瀏覽:842
程序員沒有準備去面試 瀏覽:4