我們?cè)趯懽?cè)機(jī)的時(shí)候,經(jīng)常會(huì)從匯編語言翻譯到c語言代碼。
我們先看看一個(gè)比較短和簡(jiǎn)單的函數(shù)
反編譯如下: (熱鍵F5):
可以看到產(chǎn)生的c代碼比較合理,但是不完美??瓷先ビ悬c(diǎn)亂,這是應(yīng)為反編譯不能執(zhí)行類型恢復(fù)。顯然,a1參數(shù)是指向一個(gè)結(jié)構(gòu)體的指針。讓我們?cè)黾右恍?shù)據(jù)類型看看發(fā)生什么。我們打開Structure windows(Shift-F9),增加一個(gè)結(jié)構(gòu)體。
我們切換到pseudocode window指定a1的類型。我們把光標(biāo)放在a1出現(xiàn)的地方,按Y
當(dāng)我們按回車后,反編譯器輸出開始變得更容易閱讀。
但是,這里還有一些改進(jìn)。我們把這個(gè)結(jié)構(gòu)體重新命名,并且指定它的類型。例如,fileld_6B1看上去像是一個(gè)計(jì)數(shù)器Fileld_6B5顯而易見是一個(gè)函數(shù)指針。我們不需要切換窗口就可以做這些。只有初始化結(jié)構(gòu)定義才需要切換到structure window窗口。這里我們指定函數(shù)指針的字段。
最終結(jié)果看上去像是這樣。
這里沒有強(qiáng)制類型轉(zhuǎn)換,看上去比最初的代碼好看了更多。