對(duì)于C++來(lái)說(shuō),幾乎所有的編譯器都能夠生成匯編指令輸出,而其它語(yǔ)言則不一定。
以現(xiàn)在Windows平臺(tái)流行的語(yǔ)言來(lái)說(shuō),主要是Visual C++、C++Builder和Delphi(其實(shí)本人也就熟悉這些語(yǔ)言
)。對(duì)于這些語(yǔ)言有相應(yīng)的方法來(lái)獲得其匯編代碼:
【Visual C++】
命令行:
/FA 僅生成匯編文件
/FAcs 生成匯編、機(jī)器碼以及源代碼的對(duì)照文件
/FAc 生成匯編、機(jī)器碼的對(duì)照文件
/FAs 生成匯編、源代碼的對(duì)照文件
menu: project ==>settingsC/C++屬性頁(yè)
Category:選擇Listing Files
設(shè)置listing file type為Assembly with source code
鍵入需輸出的asm文件名xxx
[或直接在底下的Project Option欄內(nèi)鍵入' /Fa "xxx" ']
Link屬性頁(yè)
勾選Generate mapfile
[或直接在底下的Project Option欄內(nèi)鍵入' /map:"Debug/Test.map" ']
OK,工程目錄下將有匯編文件xxx.asm
【C++Builder】
命令行:
/B 生成匯編文件,并調(diào)用匯編程序進(jìn)行匯編
/S 生成匯編、源代碼的對(duì)照文件
【Delphi】
這件事情有點(diǎn)復(fù)雜,實(shí)際上Delphi并不支持匯編輸出,那怎么辦?
好在Delphi有一個(gè)功能強(qiáng)勁的調(diào)試程序,編譯以后執(zhí)行程序,設(shè)置適當(dāng)?shù)臄帱c(diǎn),通過(guò)調(diào)試器提供的反匯編功能對(duì)程序進(jìn)行
反匯編,從而得到相應(yīng)段落的匯編代碼。
這實(shí)際上是一種通用的策略,包括上述的Visual C++和C++Builder也可以用同樣的方式進(jìn)行。
另外一種方法就是要通過(guò)一些輔助的反匯編工具了,將這些軟件生成的OBJ文件進(jìn)行反匯編,從而獲得相應(yīng)的代碼。
當(dāng)然, 其反匯編出來(lái)的文件效果絕對(duì)趕不上這些語(yǔ)言開發(fā)工具自己生成的效果好,可是總還是有些用處的。
對(duì)于早期的編譯軟件,例如Microsoft的FORTRAN以及編譯BASIC等,這些系統(tǒng)都支持一種代碼輸出的選項(xiàng),
能夠生成.COD文件。這種文件是偽宏匯編格式的文本文件,其作用基本相當(dāng)于匯編文件,只是通不過(guò)重新匯編而已,
然而,這種文件有時(shí)并不包含源代碼行,看起來(lái)比較費(fèi)勁(這主要是因?yàn)閮杀榫幾g的結(jié)果)。
posted on 2006-04-19 04:17
陣雨 閱讀(3798)
評(píng)論(1) 編輯 收藏 引用